mybatis3 简单入门
2014-07-07 17:12
253 查看
官网文档:http://mybatis.github.io/mybatis-3/zh/index.html
源码:https://github.com/mybatis/mybatis-3
maven依赖:
不管使用哪种持久层框架都先得有POJO和DAO
建立好POJO和DAO后我们开始使用MyBatis
每 一 个 MyBatis 的 应 用 程 序 都 以 一 个 SqlSessionFactory 对 象 的 实 例 为 核 心 。 SqlSessionFactory 对 象 的 实 例 可 以 通 过 SqlSessionFactoryBuilder 对 象 来 获 得,我们先介绍使用XML来构建
有时候你可能想从properties来读取数据源配置,而不是写死在XML中。在mybatis-config中添加properties配置
修改过后的mybatis-config:
执行buildUseXml测试,出现异常
再次执行buildUseXml测试,打印出了正常数据,一个简单的使用XML配置来读取数据成功实现。
在buildUseXml中
使用XML配置实现mybatis操作已经简单的介绍完毕,更多详细的XML配置,动态SQL等可以参看官方文档
下面介绍不依赖XML配置来实现mybatis操作,下面的测试方法是使用JAVA程序来创建一个简单的配置实例
运行buildUseAnno测试,出现异常
使用这种方式配置主要是添加映射类。
映射类是
Java 类,这些类包含 SQL 映射语句的注解从而避免了XML文件的依赖
OK,简单的使用注解方式来完成mybatis操作也已经介绍完毕,更多的注解方案请参看官方文档,实例代码请点击这里
源码:https://github.com/mybatis/mybatis-3
maven依赖:
<dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.2.6</version> </dependency>
不管使用哪种持久层框架都先得有POJO和DAO
package me.poplaris.mybatis.bean; /** * User: poplar * Date: 14-7-4 下午5:56 */ public class User { private int id; private String name; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
package me.poplaris.mybatis.dao; import me.poplaris.mybatis.bean.User; /** * User: poplar * Date: 14-7-4 下午5:59 */ public interface UserDao { public User getUserId(int id); }
建立好POJO和DAO后我们开始使用MyBatis
每 一 个 MyBatis 的 应 用 程 序 都 以 一 个 SqlSessionFactory 对 象 的 实 例 为 核 心 。 SqlSessionFactory 对 象 的 实 例 可 以 通 过 SqlSessionFactoryBuilder 对 象 来 获 得,我们先介绍使用XML来构建
@Test public void buildUseXml() throws IOException { // String resource = "org/mybatis/example/mybatis-config.xml"; String resource = "mybatis-config.xml"; //从 XML 中构建 SqlSessionFactory Reader reader = Resources.getResourceAsReader(resource); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader); //从 SqlSessionFactory 中获取 SqlSession SqlSession session = sqlSessionFactory.openSession(); try { User user = session.selectOne("me.poplaris.mybatis.dao.UserDao.getUserId",1); } finally { session.close(); } }一个简单的XML配置文件最主要的是配置数据源和事务管理器:
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://127.0.0.1:3306/test?autoReconnect=true"/> <property name="username" value="root"/> <property name="password" value="123456"/> </dataSource> </environment> </environments> </configuration>
有时候你可能想从properties来读取数据源配置,而不是写死在XML中。在mybatis-config中添加properties配置
<properties resource="config.properties"></properties>config.properties文件如下:
driver=com.mysql.jdbc.Driver url=jdbc:mysql://127.0.0.1:3306/test?autoReconnect=true username=root password=root
修改过后的mybatis-config:
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <properties resource="config.properties"></properties> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="${driver}"/> <property name="url" value="${url}"/> <property name="username" value="${username}"/> <property name="password" value="${password}"/> </dataSource> </environment> </environments> </configuration>
执行buildUseXml测试,出现异常
java.lang.IllegalArgumentException: Mapped Statements collection does not contain value for me.poplaris.mybatis.dao.UserDao.getUserId这是因为Mapped中没有实现UserDao,在mybatis-config.xml中添加POJO别名和mappers配置
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <properties resource="config.properties"></properties> <typeAliases> <typeAlias alias="User" type="me.poplaris.mybatis.bean.User"/> </typeAliases> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="${driver}"/> <property name="url" value="${url}"/> <property name="username" value="${username}"/> <property name="password" value="${password}"/> </dataSource> </environment> </environments> <mappers> <mapper resource="mybatis/User.xml"/> </mappers> </configuration>并实现UserDao,新增XML配置文件User.xml
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="me.poplaris.mybatis.dao.UserDao"> <select id="getUserId" parameterType="int" resultType="User"> select * from `user` where id = #{id} </select> </mapper>User.xml中mapper的namespace对应我们定义的DAO接口类UserDao,id为getUserId的select操作对应UserDao里的getUserId(int id)方法
再次执行buildUseXml测试,打印出了正常数据,一个简单的使用XML配置来读取数据成功实现。
在buildUseXml中
session.selectOne("me.poplaris.mybatis.dao.UserDao.getUserId",1);因为我们在mapper中已经配置了这个namespace,所以这行代码有更简单安全的方式来代替
UserDao userDao = session.getMapper(UserDao.class); User user = userDao.getUserId(1);所以整个buildUseXml测试变成了这样:
@Test
public void buildUseXml() throws IOException {
// String resource = "org/mybatis/example/mybatis-config.xml";
String resource = "mybatis-config.xml";
//从 XML 中构建 SqlSessionFactory
Reader reader = Resources.getResourceAsReader(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
//从 SqlSessionFactory 中获取 SqlSession
SqlSession session = sqlSessionFactory.openSession();
try {
// User user = session.selectOne("me.poplaris.mybatis.dao.UserDao.getUserId",1);
UserDao userDao = session.getMapper(UserDao.class); User user = userDao.getUserId(1);
System.out.println(user);
} finally {
session.close();
}
}
使用XML配置实现mybatis操作已经简单的介绍完毕,更多详细的XML配置,动态SQL等可以参看官方文档
下面介绍不依赖XML配置来实现mybatis操作,下面的测试方法是使用JAVA程序来创建一个简单的配置实例
@Test public void buildUseAnno(){ String url = "jdbc:mysql://127.0.0.1:3306/test?autoReconnect=true"; String userName = "root"; String password = "root"; //数据源 DataSource dataSource = new MyDefaultDataSource(url,userName,password); //事务工厂 TransactionFactory transactionFactory = new JdbcTransactionFactory(); Environment environment = new Environment("development", transactionFactory, dataSource); Configuration configuration = new Configuration(environment); //绑定DAO mapper configuration.addMapper(UserDaoWithAnno.class); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(configuration); SqlSession session = sqlSessionFactory.openSession(); try { UserDaoWithAnno userDao = session.getMapper(UserDaoWithAnno.class); User user = userDao.getUserId(1); System.out.println(user); List<User> userList = userDao.getUsers(); System.out.println(userList); } finally { session.close(); } }首先需要自己实现DataSource,MyDefaultDataSource核心的代码片段如下:
@Override public Connection getConnection(String username, String password) throws SQLException { return DriverManager.getConnection(url,username,password); }
运行buildUseAnno测试,出现异常
org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): me.poplaris.mybatis.dao.UserDaoWithAnno.getUserId这是因为mapper绑定未完成,我们需要对具体的SQL操作做绑定
使用这种方式配置主要是添加映射类。
configuration.addMapper(UserDaoWithAnno.class);
映射类是
Java 类,这些类包含 SQL 映射语句的注解从而避免了XML文件的依赖
package me.poplaris.mybatis.dao; import me.poplaris.mybatis.bean.User; import org.apache.ibatis.annotations.Select; import java.util.List; /** * User: poplar * Date: 14-7-4 下午5:59 */ public interface UserDaoWithAnno { @Select("select * from user where id= #{id}") public User getUserId(int id); @Select("select * from user") public List<User> getUsers(); }使用Select注解完成注册mapper,再次执行buildUseAnno测试,成功。
OK,简单的使用注解方式来完成mybatis操作也已经介绍完毕,更多的注解方案请参看官方文档,实例代码请点击这里
相关文章推荐
- Mybatis环境搭建及简单入门
- Java:MyBatis3新手简单入门
- spring整合mybatis(入门级简单教程2)
- Mybatis入门(二)--环境搭建、简单实现及原理
- Mybatis简单入门<学习随笔>
- Mybatis 入门学习,简单例子
- MyBatis 学习总结(一)——MyBatis 简单介绍及快速入门
- 这是mybatis最简单的入门
- Mybatis 3.2.7 简单入门Demo
- myBatis简单入门
- Java:MyBatis简单入门
- Mybatis 3.2.7 简单入门Demo
- mybatis简单的入门开发步骤
- spring整合mybatis(入门级简单教程1)--在spring中配置c3p0,并成功测试
- Mybatis入门简单例子详解
- MyBatis3入门一(简单查询、插入)
- SpringMVC入门二: 1规范结构, 2简单整合MyBatis
- Mybatis简单的入门之增删改查
- spring整合mybatis(入门级简单教程4)--扫描mapper类
- Mybatis简单入门<学习随笔>