安装
1 2 3 4 5
| <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>x.x.x</version> </dependency>
|
构建SqlSessionFactory
- 每个基于 MyBatis 的应用都是以一个 SqlSessionFactory 的实例为中心的,在构建SqlSessionFactory时,可以使用两种构建方式,分别是xml配置文件构建和Java代码构建。
xml构建:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| <?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://localhost:3306/mybatis"/> <property name="username" value="root"/> <property name="password" value="${password}"/> </dataSource> </environment> </environments>
|
1 2 3 4 5
| String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
|
Java构建:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| Properties properties = new Properties(); properties.setProperty("driver","com.mysql.jdbc.Driver"); properties.setProperty("url","jdbc:mysql://localhost:3306/mybatis"); properties.setProperty("username","root"); properties.setProperty("password","${password}");
PooledDataSourceFactory pooledDataSourceFactory = new PooledDataSourceFactory(); pooledDataSourceFactory.setProperties(properties); DataSource dataSource = pooledDataSourceFactory.getDataSource();
TransactionFactory transactionFactory = new JdbcTransactionFactory();
Environment environment = new Environment("development",transactionFactory,dataSource);
Configuration configuration = new Configuration(environment);
|
1
| SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(configuration);
|
注:xml构建方法和Java构建方法的结果是完全一致的,并且xml中节点代表的意义也与代码中各种类型代表的意义一致,只不过是两种不同的方法而已。对于不希望使用xml文件的人来说,可以使用Java代码配置。同时在这里我们可以发现,使用xml文件来配置MyBatis的Configuration,在一定程度上比使用Java代码更加简洁,因此更推荐使用xml文件配置Configuration。
定义表所对应的实体类
数据表的结构如下:
1 2 3 4 5
| CREATE TABLE user( id INT(10) PRIMARY KEY, name VARCHAR(22), age INT(10) )
|
定义与之对应的实体类:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| public class User { private int id; private String name; private int age;
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; }
public int getAge() { return age; }
public void setAge(int age) { this.age = age; } }
|
从SqlSessionFactory中获取SqlSession
- 顾名思义,有了SqlSessionFactory,我们就可以从中获取SqlSession。
1
| SqlSession session = sqlSessionFactory.openSession();
|
- SqlSession 完全包含了面向数据库执行 SQL 命令所需的所有方法。
- 可以通过 SqlSession 实例来直接执行已映射的 SQL 语句。
构建映射器Mapper
xml配置:
- 直接在mybatis-config.xml文件configuration节点内添加mapper节点:
1 2 3 4 5 6 7
| <mappers> <mapper resource="mapper.xml"/> <mapper class="com.mapping.UserMapper"/> <mapper url="file://mapper.xml"/> </mappers>
|
- 随后新建mapper.xml作为mapper的映射文件,并在mapper中写入数据库操作语句。
1 2 3 4 5 6 7 8
| <?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="domain.userMapper"> <select id="getUser" parameterType="int" resultType="domain.User"> SELECT * FROM user WHERE id = #{id} </select> </mapper>
|
- 也可以新建一个接口文件做为mapper的接口,如下所示:
1 2 3 4 5 6 7 8 9 10
| package mapping;
import domain.User; import org.apache.ibatis.annotations.Select;
public interface UserMapper {
@Select(value = "SELECT * FROM user WHERE id = #{id} ") User findById(int id); }
|
Java配置:
1 2 3 4 5 6
| configuration.addMapper(UserMapper.class);
configuration.addMapper("com.mapping");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(configuration);
|
在这里我们可以发现,使用xml配置映射器方式更多,且java代码配置无法添加xml文件做为映射器,比较下来有一定的局限性。
使用已经映射的SQL语句
我们利用SqlSession来使用已经在映射器中映射的SQL语句。
1 2 3 4
| String statement = "domain.userMapper.getUser";
User user = session.selectOne(statement,1);
|
或者
1 2 3
| UserMapper mapper = session.getMapper(UserMapper.class); User user = mapper.findById(1);
|
最后使用映射器中的方法进行数据库的操作。