编码流程
- 编写全局配置文件:SqlMapConfifig.xml
- 编写映射文件xxxxMapper.xml
-
编写 dao 代码: xxxDao 接口、 xxxDaoImpl 实现类
-
POJO 类
-
单元测试类
需求
- 根据用户id查询一个用户信息2、根据用户名称模糊查询用户信息列表
- 根据用户名称模糊查询用户信息列表
- 添加用户
项目搭建
- 创建工程
- 添加mybatis.jar包(或依赖)
<dependencies>
<!-- mybatis依赖 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
</dependency>
<!-- mysql依赖 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.35</version>
</dependency>
<!-- 单元测试 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
</dependencies>
- SqlMapConfig.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>
<properties resource="com/wdt/tools/database/resources/db.properties"></properties>
<environments default="devlopment">
<environment id="devlopment">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="driver" value="${db.driver}"/>
<property name="url" value="${db.url}"/>
<property name="username" value="${db.username}"/>
<property name="password" value="${db.password}"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/wdt/tools/database/resources/mappers/UserMapper.xml"/>
</mappers>
</configuration>
- UserMapper.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="com.wdt.tools.database.mappers.UserMapper">
<select id="findUsersByName" parameterType="string" resultType="com.wdt.tools.database.entity.UserMapperEntity">
select * from tb_user u where user_name like '%${value}%'
</select>
</mapper>
配置说明:
- parameterType:定义输入参数的Java类型,
- resultType:定义结果映射类型。
- #{}:相当于JDBC中的?占位符
- #{id}表示使用preparedstatement设置占位符号并将输入变量id传到sql。
- ${value}:取出参数名为value的值。将${value}占位符替换。
注意:如果是取简单数量类型的参数,括号中的参数名称必须为value
- POJO类
package com.wdt.tools.database.entity;
public class UserMapperEntity {
private Long id;
private String user_name;
private String password;
/**省略getter和setter*/
}
- Mapper(Dao)类
public interface UserMapper {
public List<UserMapperEntity> findUsersByName(String name) throws Exception;
}
- 测试类
public class TestMyBatis {
private static SqlSessionFactory sessionFactory;
public static void setUp() throws IOException {
String resource = "com/wdt/tools/database/resources/SqlMapConfig.xml";
InputStream in = Resources.getResourceAsStream(resource);
sessionFactory = new SqlSessionFactoryBuilder().build(in);
}
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
setUp();
SqlSession session = sessionFactory.openSession();
UserMapper mapper = session.getMapper(UserMapper.class);
List<UserMapperEntity> users = mapper.findUsersByName("本");
for (UserMapperEntity user : users) {
System.out.println(user.getUser_name());
}
}
}
说明:
生命周期范围
1. sqlsession
:方法级别
2. sqlsessionFactory
:全局范围(应用级别)
3. sqlsessionFactoryBuilder
:方法级别
课外知识:主键返回
<insert id="insertUser" parameterType="com.kkb.mybatis.po.User">
<!-- selectKey将主键返回,需要再返回 -->
<selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">
select LAST_INSERT_ID()
</selectKey>
insert into user(username,birthday,sex,address) values(#{username},#{birthday},#{sex},#{address});
</insert>
添加
selectKey
标签实现主键返回
- keyProperty:指定返回的主键,存储在pojo中的哪个属性
- order:selectKey标签中的sql的执行顺序,是相对与insert语句来说。由于mysql的自增原理,执行完insert语句之后才将主键生成,所以这里selectKey的执行顺序为after。
- resultType:返回的主键对应的JAVA类型
- LAST_INSERT_ID():是mysql的函数,返回auto_increment自增列新记录id值。