mybatis的mapper代理方法来实现
2018-03-31 11:02
489 查看
mapper代理方法来实现(实际开发用到的)
1、pom.xml文件一样
2、SqlMappingConfig.xml一样
3、开发规范:编写mapper接口需要遵循一些开发规范,mybatis可以自动生成mapper接口实现类代理对象。
接口UserMapping.xml文件(可能有点多、挑着看就好)
(注意在SqlMappingConfig.xml文件中已经引用它)
UserMapping.java类
包装类、继承类(这些只是为了以后更好的拓展罢了)
UserMapping的子类
UserMapping的包装类
3.5测试类
1、pom.xml文件一样
2、SqlMappingConfig.xml一样
3、开发规范:编写mapper接口需要遵循一些开发规范,mybatis可以自动生成mapper接口实现类代理对象。
接口UserMapping.xml文件(可能有点多、挑着看就好)
(注意在SqlMappingConfig.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命名空间,作用就是对sql进行分类化管理,理解sql隔离 --> <!-- 注意:使用mapper代理方法开发,namespace有特殊重要的作用,namespace等于mapper接口地址 --> <mapper namespace="cn.com.mybatis.mapper.UserMapper"> <!-- 定义sql片段 --> <!-- id:sql片段的唯 一标识 --> <!-- 经验:是基于单表来定义sql片段,这样话这个sql片段可重用性才高 在sql片段中不要包括 where --> <sql id="query_user_where"> <if test="userCustom!=null"> <if test="userCustom.sex!=null and userCustom.sex!=''"> and user.sex = #{userCustom.sex} </if> <if test="userCustom.username!=null and userCustom.username!=''"> and user.username LIKE '%${userCustom.username}%' </if> </if> </sql> <!-- 已经指定好别名! --> <!-- 运用sql片段 --> <!-- 用户信息综合查询 #{userCustom.sex}:取出pojo包装对象中性别值 --> <!-- ${userCustom.username}:取出pojo包装对象中用户名称 --> <select id="findUserList" parameterType="UserQueryVo" resultType="UserCustom"> SELECT * FROM USER <!-- where可以自动去掉条件中的第一个and --> <where> <!-- 引用sql片段 的id,如果refid指定的id不在本mapper文件中,需要前边加namespace --> <include refid="query_user_where"></include> <!-- 在这里还要引用其它的sql片段 --> </where> </select> <!-- 用户信息综合查询总数 parameterType:指定输入类型和findUserList一样 resultType:输出结果类型 --> <select id="findUserCount" parameterType="UserQueryVo" resultType="int"> SELECT count(*) FROM USER <!-- where可以自动去掉条件中的第一个and --> e167 <where> <!-- 引用sql片段 的id,如果refid指定的id不在本mapper文件中,需要前边加namespace --> <include refid="query_user_where"></include> <!-- 在这里还要引用其它的sql片段 --> </where> </select> <!-- 在 映射文件中配置很多sql语句 --> <!-- 需求:通过id查询用户表的记录 --> <!-- 通过 select执行数据库查询 --> <!-- id:标识 映射文件中的 sql --> <!-- 将sql语句封装到mappedStatement对象中,所以将id称为statement的id --> <!-- parameterType:指定输入 参数的类型,这里指定int型 --> <!-- #{}表示一个占位符号 --> <!-- #{id}:其中的id表示接收输入 的参数,参数名称就是id,如果输入 参数是简单类型,#{}中的参数名可以任意,可以value或其它名称 --> <!-- resultType:指定sql输出结果 的所映射的java对象类型,select指定resultType表示将单条记录映射成的java对象。 --> <!-- mapper开发代理规范2:UserMapper 接口中的接口方法名跟id名一样 --> <!-- mapper开发代理规范3:UserMapper 接口中的返回类型名跟resultType类型一样 --> <!-- mapper开发代理规范 4:UserMapper 接口中的参数类型名跟parameterType类型一样 --> <select id="findUserById" parameterType="int" resultType="user"> SELECT * FROM USER WHERE id=#{value} </select> <!-- 根据用户名称模糊查询用户信息,可能返回多条 resultType:指定就是单条记录所映射的java对象 类型 ${}:表示拼接sql串,将接收到参数的内容不加任何修饰拼接在sql中。 使用${}拼接sql,引起 sql注入 ${value}:接收输入 参数的内容,如果传入类型是简单类型,${}中只能使用value --> <select id="findUserByName" parameterType="java.lang.String" resultType="user"> SELECT * FROM USER WHERE username LIKE '%${value}%' </select> <!-- 定义resultMap --> <!-- 将SELECT id id_,username username_ FROM USER 和User类中的属性作一个映射关系 --> <!-- type:resultMap最终映射的java对象类型,可以使用别名 --> <!-- id:对resultMap的唯一标识 --> <resultMap type="user" id="userResultMap"> <!--id表示查询结果集中唯一标识 --> <!--column:查询出来的列名 --> <!--property:type指定的pojo类型中的属性名 最终resultMap对column和property作一个映射关系 (对应关系) --> <id column="id_" property="id" /> <!--result:对普通名映射定义 --> <!--column:查询出来的列名 --> <!--property:type指定的pojo类型中的属性名 最终resultMap对column和property作一个映射关系 (对应关系) --> <result column="username_" property="username" /> </resultMap> <!-- 使用resultMap进行输出映射 --> <!--resultMap:指定定义的resultMap的id,如果这个resultMap在其它的mapper文件,前边需要加namespace --> <select id="findUserByIdResultMap" parameterType="int" resultMap="userResultMap"> SELECT id id_,username username_ FROM USER WHERE id=#{value} </select> </mapper>
UserMapping.java类
import java.util.List; import cn.com.czy.mybatis.pojo.User; /** * 总结: * 1、mapper代理方式、理解mapper开发规范 * 2、mapper文件是usermapper.xml * 3、了解动态sql、别名、sql代码片、 * 4、了解 resultMap * * <p> * Title: UserMapper * </p> * <p> * Description: mapper接口,相当 于dao接口,用户管理 * </p> */ public interface UserMapper { // 根据id查询用户信息 public User findUserById(int id) throws Exception; // 根据用户名列查询用户列表 public List<User> findUserByName(String name) throws Exception; // 根据id查询用户信息,使用resultMap输出 public User findUserByIdResultMap(int id) throws Exception; // 用户信息综合查询 public List<UserCustom> findUserList(UserQueryVo userQueryVo) throws Exception; // 用户信息综合查询总数 public int findUserCount(UserQueryVo userQueryVo) throws Exception; // 插入用户 public void insertUser(User user) throws Exception; // 删除用户 public void deleteUser(int id) throws Exception; }
包装类、继承类(这些只是为了以后更好的拓展罢了)
UserMapping的子类
/** * 总结: * 1、mapper代理方式、理解mapper开发规范 * 2、mapper文件是usermapper.xml * 3、了解动态sql、别名、sql代码片、 * 4、了解 resultMap * * <p>Title: UserCustom</p> * <p>Description: 用户的扩展类</p> */ public class UserCustom extends User{ //可以扩展用户的信息 }
UserMapping的包装类
/** * 总结: * 1、mapper代理方式、理解mapper开发规范 * 2、mapper文件是usermapper.xml * 3、了解动态sql、别名、sql代码片、 * 4、了解 resultMap * * <p>Title: UserQueryVo</p> * <p>Description:包装类型 </p> */ public class UserQueryVo { //在这里包装所需要的查询条件 //用户查询条件 private UserCustom userCustom; public UserCustom getUserCustom() { return userCustom; } public void setUserCustom(UserCustom userCustom) { this.userCustom = userCustom; } //可以包装其它的查询条件,订单、商品 //.... }
3.5测试类
import java.io.InputStream; import java.util.List; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import org.junit.Before; import org.junit.Test; /* * * 总结: * 1、mapper代理方式、理解mapper开发规范 * 2、mapper文件是usermapper.xml * 3、了解动态sql、别名、sql代码片、 * 4、了解 resultMap * */ public class UserMapperTest { private SqlSessionFactory sqlSessionFactory; // 此方法是在执行testFindUserById之前执行 @Before public void setUp() throws Exception { // mybatis配置文件 String resource = "config/SqlMapConfig.xml"; // 得到配置文件流 InputStream inputStream = Resources.getResourceAsStream(resource); // 创建会话工厂,传入mybatis的配置文件信息 sqlSessionFactory = new SqlSessionFactoryBuilder() .build(inputStream); } //用户信息的综合 查询 @Test public void testFindUserList() throws Exception { SqlSession sqlSession = sqlSessionFactory.openSession(); //创建UserMapper对象,mybatis自动生成mapper代理对象 UserMapper userMapper = sqlSession.getMapper(UserMapper.class); //创建包装对象,设置查询条件 UserQueryVo userQueryVo = new UserQueryVo(); UserCustom userCustom = new UserCustom(); userCustom.setSex("1"); userCustom.setUsername("郑游"); userQueryVo.setUserCustom(userCustom); //调用userMapper的方法 List<UserCustom> list = userMapper.findUserList(userQueryVo); System.out.println(list); } @Test public void testFindUserCount() throws Exception { SqlSession sqlSession = sqlSessionFactory.openSession(); //创建UserMapper对象,mybatis自动生成mapper代理对象 UserMapper userMapper = sqlSession.getMapper(UserMapper.class); //创建包装对象,设置查询条件 UserQueryVo userQueryVo = new UserQueryVo(); UserCustom userCustom = new UserCustom(); userCustom.setSex("1"); userCustom.setUsername("郑游"); userQueryVo.setUserCustom(userCustom); //调用userMapper的方法 int count = userMapper.findUserCount(userQueryVo); System.out.println(count); } @Test public void testFindUserById() throws Exception { SqlSession sqlSession = sqlSessionFactory.openSession(); //创建UserMapper对象,mybatis自动生成mapper代理对象 UserMapper userMapper = sqlSession.getMapper(UserMapper.class); //调用userMapper的方法 User user = userMapper.findUserById(1); System.out.println(user); } @Test public void testFindUserByName() throws Exception { SqlSession sqlSession = sqlSessionFactory.openSession(); //创建UserMapper对象,mybatis自动生成mapper代理对象 UserMapper userMapper = sqlSession.getMapper(UserMapper.class); //调用userMapper的方法 List<User> list = userMapper.findUserByName("小明"); sqlSession.close(); System.out.println(list); } @Test public void testFindUserByIdResultMap() throws Exception { SqlSession sqlSession = sqlSessionFactory.openSession(); //创建UserMapper对象,mybatis自动生成mapper代理对象 UserMapper userMapper = sqlSession.getMapper(UserMapper.class); //调用userMapper的方法 User user = userMapper.findUserByIdResultMap(1); System.out.println(user); } }
相关文章推荐
- mybatis的mapper代理方法开发实现用户的增删改查
- Mybatis Mapper动态代理方法 即 只写Dao接口 不谢Dao的实现类
- mybatis mapper代理方法实现单表的增删改查
- 10_Mybatis开发Dao方法——mapper代理实现
- mybatis利用mapper代理的方法实现多条件查询
- Mybatis mapper代理开发方法实现增删改查
- 【MyBatis框架点滴】——MyBatis开发DAO的两种方法:原始DAO开发方法和Mapper代理方法
- Mybatis中mapper代理方法替换原始Dao开发方法
- mybatis04--Mapper动态代理实现
- 【MyBatis学习04】mapper代理方法开发dao
- MyBatis学习(四):MyBatis使用代理方法(接口)实现数据库的操作
- Mybatis中mapper代理方法
- Mybatis的Mapper代理方法和全局配置文件
- Mybatis与Spring的mapper代理整合方法
- Mybatis 源码解析二、Mapper接口的代理实现过程 MapperScannerConfigurer 解析
- mybatis框架(2)---mapper代理方法
- Mybatis之mapper代理方法
- Mybatis3源码分析(21)-Mapper实现-动态代理
- MyBatis_mapper代理开发方法
- [置顶] 【Mybatis】深入浅出Mybatis(六)——mapper代理方法使用