1.动态代理只需使用接口,不需使用实现接口的实体类
UserMapper.java
package com.wuhaitao.mybatis.demo3.mapper;
import java.util.List;
import com.wuhaitao.mybatis.demo1.User;
public interface UserMapper {
//根据用户id查询用户信息
public User getUserById(Integer id);
//根据用户名称查找用户信息
public List<User> getUserByUsername(String username);
//添加用户
public void insertUser(User user);
}
2.配置接口相对应的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 命名空间,用于隔离sql语句,后继有重要作用 -->
<!--
在动态代理中:
1.命名空间的值必须是接口的全路径名 如:com.wuhaitao.mybatis.demo3.mapper.UserMapper
2.接口的方法名必须与sql id 一致。如select标签下的id属性必须与UserMapper接口的对应方法名一致
3.接口的入参 必须与 sql parameterType的类型一致。
4.接口的返回值必须与sql resultType的类型一致
-->
<mapper namespace="com.wuhaitao.mybatis.demo3.mapper.UserMapper">
<!--
在select标签中编写查询的SQL语句, 设置select标签的id属性为getUserById,id属性值必须是唯一的,不能够重复
使用parameterType属性指明查询时使用的参数类型,resultType属性指明查询返回的结果集类型
resultType="com.wuhaitao.mybatis.demo1.User"就表示将查询结果封装成一个User类的对象返回
User类就是cst_customer表所对应的实体类
-->
<select id="getUserById" parameterType="int" resultType="com.wuhaitao.mybatis.demo1.User">
<!-- 查询语句这么写是因为,再查询时大量数据时可以节省很多时间 ,在参数上使用' #{}' 来表示 相当于JDBC的?号-->
SELECT
`user`.id,
`user`.username,
`user`.birthday,
`user`.sex,
`user`.address
FROM `user`
WHERE id = #{id}
</select>
<select id="getUserByUsername" parameterType="string" resultType="com.wuhaitao.mybatis.demo1.User">
<!-- 查询语句这么写是因为,再查询时大量数据时可以节省很多时间 ,在参数上使用' #{}' 来表示 相当于JDBC的?号-->
<!-- ${} 当参数类型为普通类型时 ,其值只能为value -->
SELECT
`user`.id,
`user`.username,
`user`.birthday,
`user`.sex,
`user`.address
FROM `user`
<!-- WHERE username LIKE '%${value}%' -->
WHERE username LIKE '%${value}%'
</select>
<!-- 插入用户 -->
<insert id="insertUser" parameterType="com.wuhaitao.mybatis.demo1.User" useGeneratedKeys="true" keyProperty="id">
<!-- keyProperty指User中的主键属性 -->
<!-- resultTYype 主键数据类型 -->
<!-- order 何时执行 -->
<!-- <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>
3.加载映射文件
4.测试类
UserMapperTest.java
package com.wuhaitao.mybatis.demo3;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import com.wuhaitao.mybatis.demo1.SqlSessionFactoryUtils;
import com.wuhaitao.mybatis.demo1.User;
import com.wuhaitao.mybatis.demo3.mapper.UserMapper;
public class UserMapperTest {
@Test
public void testGetUserById() {
SqlSession sqlSession = SqlSessionFactoryUtils.getSessionFactory().openSession();
//获取接口的代理实现类,由getMapper()实现
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
User user = userMapper.getUserById(30);
System.out.println(user);
sqlSession.close();
}
@Test
public void testGetUserByUsername() {
SqlSession sqlSession = SqlSessionFactoryUtils.getSessionFactory().openSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
List<User> list = userMapper.getUserByUsername("白");
for (User user : list) {
System.out.println(user);
}
sqlSession.close();
}
@Test
public void testInsertUser() {
SqlSession sqlSession = SqlSessionFactoryUtils.getSessionFactory().openSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
User user = new User();
user.setUsername("白灵涵");
user.setSex("2");
user.setAddress("河南");
userMapper.insertUser(user);
sqlSession.commit();
sqlSession.close();
}
}
网友评论