目录
一.原始的dao开发
1.1 配置文件
①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="user">
<!-- id:statementId
resultType:查询结果集的数据类型
parameterType:查询的入参
-->
<select id="getUserById" parameterType="int" resultType="mybatis.pojo.User" >
<!-- #{}:点位符,相当于jdbc的? -->
SELECT * FROM USER WHERE id = #{id1}
</select>
<!-- resultType:如果要返回数据集合,只需设定为每一个元素的数据类型 -->
<select id="getUserByName" parameterType="string" resultType="mybatis.pojo.User">
<!--
方式一: SELECT * FROM USER WHERE username LIKE #{name}
方式二: ${value}:字符串拼接指令,如果入参为普通数据类型{}内部只能写value,无需在代码中添加% %,如下
-->
SELECT * FROM USER WHERE username LIKE '%${value}%'
</select>
<!-- 方式一
useGeneratedKeys:标识插入使用自增id
keyProperty:与useGeneratedKeys配套使用,用于绑定主键接收的pojo属性
<insert id="insertUser" parameterType="mybatis.pojo.User" useGeneratedKeys="true" keyProperty="id">
-->
<!-- 方式二 -->
<insert id="insertUser" parameterType="mybatis.pojo.User">
<!-- selectKey:用于配置主键返回
keyProperty:要绑定的pojo属性
resultType:属性数据类型
order:指定什么时候执行,AFTER之后
-->
<selectKey keyProperty="id" resultType="int" order="AFTER">
SELECT LAST_INSERT_ID()
</selectKey>
INSERT INTO USER
(`username`,
`birthday`,
`sex`,
`address`)
VALUES (#{username},
#{birthday},
#{sex},
#{address});
</insert>
<update id="updateUser" parameterType="mybatis.pojo.User">
UPDATE USER SET username = #{username} WHERE id = #{id}
</update>
<delete id="deleteUser" parameterType="int">
DELETE FROM `user` WHERE `id` = #{id1}
</delete>
</mapper>
②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>
<!-- 和spring整合后 environments配置将废除 -->
<environments default="development">
<environment id="development">
<!-- 使用jdbc事务管理 -->
<transactionManager type="JDBC" />
<!-- 数据库连接池 -->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url"
value="jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8" />
<property name="username" value="root" />
<property name="password" value="root" />
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="mybatis/user.xml"/>
<mapper resource="mybatis/UserMapper.xml"/>
</mappers>
</configuration>
1.2 新建个UserDao接口
public interface UserDao {
/**根据用户ID查询用户信息
* @param id
* @return
*/
User getUserById(Integer id);
/**
* 根据用户名查找用户列表
* @param name
* @return
*/
List<User> getUserByUserName(String name);
/**
* 添加用户
* @param user
*/
void insertUser(User user);
}
1.3 新建个UserDaoImpl接口实现类
public class UserDaoImpl implements UserDao {
@Override
public User getUserById(Integer id) {
SqlSession sqlSession = SqlSessionFactoryUtils.getSqlSessionFactory().openSession();
User user = sqlSession.selectOne("user.getUserById", id);
sqlSession.close();
return user;
}
@Override
public List<User> getUserByUserName(String name) {
SqlSession sqlSession = SqlSessionFactoryUtils.getSqlSessionFactory().openSession();
List<User> list = sqlSession.selectList("user.getUserByName", name);
sqlSession.close();
return list;
}
@Override
public void insertUser(User user) {
SqlSession sqlSession = SqlSessionFactoryUtils.getSqlSessionFactory().openSession();
sqlSession.insert("user.insertUser", user);
sqlSession.commit();
sqlSession.close();
}
}
二.动态代理方式的dao开发
2.1 开发规则
- namespace必需是接口的全路径名
- 接口的方法名必需与映射文件的sql id一致
- 接口的输入参数必需与映射文件的parameterType类型一致
- 接口的返回类型必须与映射文件的resultType类型一致
2.2 开发步骤
- 创建UserMapper.xml映射文件(把原来的user.xml复制按开发规则要求修改一下)
- 创建UserMapper接口(把原来的UserDao.java复制按开发规则要求修改一下)
- 加载UserMapper.xml
- 该方法无需实现类
配置 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">
<!--
动态代理开发规则
namespace必须是接口的全路径名;
接口的方法名必须与sqlid 一致;
接口的入参必须与 parameterType 类型一致
接口的返回值必须与 resultType 类型一致
-->
<mapper namespace="mybatis.mapper.UserMapper">
<!-- id:statementId
resultType:查询结果集的数据类型
parameterType:查询的入参
-->
<select id="getUserById" parameterType="int" resultType="mybatis.pojo.User" >
<!-- #{}:点位符,相当于jdbc的? -->
SELECT * FROM USER WHERE id = #{id1}
</select>
<!-- resultType:如果要返回数据集合,只需设定为每一个元素的数据类型 -->
<select id="getUserByUserName" parameterType="string" resultType="mybatis.pojo.User">
<!--
方式一: SELECT * FROM USER WHERE username LIKE #{name}
方式二: ${value}:字符串拼接指令,如果入参为普通数据类型{}内部只能写value,无需在代码中添加% %,如下
-->
SELECT * FROM USER WHERE username LIKE '%${value}%'
</select>
<!-- 方式一
useGeneratedKeys:标识插入使用自增id
keyProperty:与useGeneratedKeys配套使用,用于绑定主键接收的pojo属性
<insert id="insertUser" parameterType="mybatis.pojo.User" useGeneratedKeys="true" keyProperty="id">
-->
<!-- 方式二 -->
<insert id="insertUser" parameterType="mybatis.pojo.User">
<!-- selectKey:用于配置主键返回
keyProperty:要绑定的pojo属性
resultType:属性数据类型
order:指定什么时候执行,AFTER之后
-->
<selectKey keyProperty="id" resultType="int" order="AFTER">
SELECT LAST_INSERT_ID()
</selectKey>
INSERT INTO USER
(`username`,
`birthday`,
`sex`,
`address`)
VALUES (#{username},
#{birthday},
#{sex},
#{address});
</insert>
</mapper>
UserMapper接口
public interface UserMapper {
/**根据用户ID查询用户信息
* @param id
* @return
*/
User getUserById(Integer id);
/**
* 根据用户名查找用户列表
* @param name
* @return
*/
List<User> getUserByUserName(String name);
/**
* 添加用户
* @param user
*/
void insertUser(User user);
}
2.3 测试动态代理开发
public class UserMapperTest {
@Test
public void testGetUserById() {
// 加载配置得到SqlSession
SqlSession sqlSession = SqlSessionFactoryUtils.getSqlSessionFactory().openSession();
// 获取代理对象
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
// 查询数据
User user = userMapper.getUserById(30);
System.out.println(user);
// 关闭资源
sqlSession.close();
}
@Test
public void testGetUserByUserName() {
SqlSession sqlSession = SqlSessionFactoryUtils.getSqlSessionFactory().openSession();
// 获取代理对象
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
// 查询数据
List<User> list = userMapper.getUserByName("张");
for (User user : list) {
System.out.println(user);
}
// 关闭资源
sqlSession.close();
}
@Test
public void testInsertUser() {
SqlSession sqlSession = SqlSessionFactoryUtils.getSqlSessionFactory().openSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
User user = new User();
user.setUsername("张飞飞");
user.setAddress("深圳市");
user.setBirthday(new Date());
user.setSex("1");
userMapper.insertUser(user);
// 提交事务
sqlSession.commit();
// 关闭资源
sqlSession.close();
}
}