1. public class User {
  2. private int id;
  3. private String username;// 用户姓名
  4. private String sex;// 性别
  5. private Date birthday;// 生日
  6. private String address;// 地址
  7.  
  8. public int getId() {
  9. return id;
  10. }
  11. public void setId(int id) {
  12. this.id = id;
  13. }
  14. public String getUsername() {
  15. return username;
  16. }
  17. public void setUsername(String username) {
  18. this.username = username;
  19. }
  20. public String getSex() {
  21. return sex;
  22. }
  23. public void setSex(String sex) {
  24. this.sex = sex;
  25. }
  26. public Date getBirthday() {
  27. return birthday;
  28. }
  29. public void setBirthday(Date birthday) {
  30. this.birthday = birthday;
  31. }
  32. public String getAddress() {
  33. return address;
  34. }
  35. public void setAddress(String address) {
  36. this.address = address;
  37. }
  38. @Override
  39. public String toString() {
  40. return "User [id=" + id + ", username=" + username + ", sex=" + sex
  41. + ", birthday=" + birthday + ", address=" + address + "]";
  42. }
  43. }

User.java

  1. public class UserCustom extends User {
  2. //添加一些扩展字段
  3. }

UserCustom

  1. public class UserQueryVo {
  2. //用户信息
  3. private User user;
  4. //自定义user的扩展对象
  5. private UserCustom userCustom;
  6. //用户id集合
  7. private List<Integer> ids;
  8. public User getUser() {
  9. return user;
  10. }
  11. public void setUser(User user) {
  12. this.user = user;
  13. }
  14. public UserCustom getUserCustom() {
  15. return userCustom;
  16. }
  17. public void setUserCustom(UserCustom userCustom) {
  18. this.userCustom = userCustom;
  19. }
  20. public List<Integer> getIds() {
  21. return ids;
  22. }
  23. public void setIds(List<Integer> ids) {
  24. this.ids = ids;
  25. }
  26. }

UserQueryVo

  1. <!DOCTYPE configuration
  2. PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  3. "http://mybatis.org/dtd/mybatis-3-config.dtd">
  4. <configuration>
  5. <properties resource="db.properties"></properties>
  6. <!-- 定义 别名 -->
  7. <typeAliases>
  8. <!--
  9. 单个别名的定义
  10. alias:别名,type:别名映射的类型 -->
  11. <!-- <typeAlias type="cn.itcast.mybatis.po.User" alias="user"/> -->
  12. <!-- 批量别名定义
  13. 指定包路径,自动扫描包下边的pojo,定义别名,别名默认为类名(首字母小写或大写)
  14. -->
  15. <package name="cn.itcast.mybatis.po"/>
  16. </typeAliases>
  17. <!-- 和spring整合后 environments配置将废除-->
  18. <environments default="development">
  19. <environment id="development">
  20. <!-- 使用jdbc事务管理-->
  21. <transactionManager type="JDBC" />
  22. <!-- 数据库连接池-->
  23. <dataSource type="POOLED">
  24. <property name="driver" value="${jdbc.driver}"/>
  25. <property name="url" value="${jdbc.url}"/>
  26. <property name="username" value="${jdbc.username}"/>
  27. <property name="password" value="${jdbc.password}"/>
  28. </dataSource>
  29. </environment>
  30. </environments>
  31. <!--加载mapper映射
  32. 如果将和spring整合后,可以使用整合包中提供的mapper扫描器,此处的mappers不用配置了。
  33. -->
  34. <mappers>
  35. <package name="cn.yzu.mybatis.mapper"/>
  36. </mappers>
  37. </configuration>
  1. public interface UserMapper {
  2. //根据用户id查询用户信息
  3. public User findUserById(int id) throws Exception;
  4. //根据用户名称 查询用户信息
  5. public List<User> findUserByName(String username) throws Exception;
  6. //自定义查询条件查询用户信息
  7. public List<User> findUserList(UserQueryVo userQueryVo) throws Exception;
  8. //查询用户,使用resultMap进行映射
  9. public List<User> findUserListResultMap(UserQueryVo userQueryVo)throws Exception;
  10. //查询用户,返回记录个数
  11. public int findUserCount(UserQueryVo userQueryVo) throws Exception;
  12. //插入用户
  13. public void insertUser(User user)throws Exception;
  14. //删除用户
  15. public void deleteUser(int id) throws Exception;
  16. //修改用户
  17. public void updateUser(User user) throws Exception;
  18. }

UserMapper

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE mapper
  3. PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  4. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  5. <!-- namespace命名空间,为了对sql语句进行隔离,方便管理 ,mapper开发dao方式,使用namespace有特殊作用
  6. mapper代理开发时将namespace指定为mapper接口的全限定名
  7. -->
  8. <mapper namespace="cn.yzu.mybatis.mapper.UserMapper">
  9. <!-- 在mapper.xml文件中配置很多的sql语句,执行每个sql语句时,封装为MappedStatement对象
  10. mapper.xml以statement为单位管理sql语句
  11. -->
  12. <!-- 将用户查询条件定义为sql片段
  13. 建议对单表的查询条件单独抽取sql片段,提高公用性
  14. 注意:不要将where标签放在sql片段
  15. -->
  16. <sql id="query_user_where">
  17. <!-- 如果 userQueryVo中传入查询条件,再进行sql拼接-->
  18. <!-- test中userCustom.username表示从userQueryVo读取属性值-->
  19. <if test="userCustom!=null">
  20. <if test="userCustom.username!=null and userCustom.username!=''">
  21. and username like '%${userCustom.username}%'
  22. </if>
  23. <if test="userCustom.sex!=null and userCustom.sex!=''">
  24. and sex = #{userCustom.sex}
  25. </if>
  26. <!-- 根据id集合查询用户信息 -->
  27. <!-- 最终拼接的效果:
  28. SELECT id ,username ,birthday FROM USER WHERE username LIKE '%小明%' AND id IN (16,22,25)
  29. collection:集合的属性
  30. open:开始循环拼接的串
  31. close:结束循环拼接的串
  32. item:每次循环取到的对象
  33. separator:每两次循环中间拼接的串
  34. -->
  35. <foreach collection="ids" open=" AND id IN ( " close=")" item="id" separator=",">
  36. #{id}
  37. </foreach>
  38. <!--
  39. SELECT id ,username ,birthday FROM USER WHERE username LIKE '%小明%' AND (id = 16 OR id = 22 OR id = 25)
  40. <foreach collection="ids" open=" AND ( " close=")" item="id" separator="OR">
  41. id = #{id}
  42. </foreach>
  43. -->
  44. <!-- 还有很多的查询条件 -->
  45. </if>
  46. </sql>
  47. <!-- 定义resultMap,列名和属性名映射配置
  48. id:mapper.xml中的唯一标识
  49. type:最终要映射的pojo类型
  50. -->
  51. <resultMap id="userListResultMap" type="user" >
  52. <!-- 列名
  53. id_,username_,birthday_
  54. id:要映射结果集的唯 一标识 ,称为主键
  55. column:结果集的列名
  56. property:type指定的哪个属性中
  57. -->
  58. <id column="id_" property="id"/>
  59. <!-- result就是普通列的映射配置 -->
  60. <result column="username_" property="username"/>
  61. <result column="birthday_" property="birthday"/>
  62. </resultMap>
  63. <!-- 根据id查询用户信息 -->
  64. <select id="findUserById" parameterType="int" resultType="user">
  65. SELECT * FROM USER WHERE id= #{id}
  66. </select>
  67. <!-- 根据用户名称查询用户信息,可能返回多条-->
  68. <select id="findUserByName" parameterType="java.lang.String" resultType="cn.yzu.mybatis.po.User">
  69. select * from user where username like '%${value}%'
  70. </select>
  71. <!-- 自定义查询条件查询用户的信息
  72. %${userCustom.username}%:userCustom是userQueryVo中的属性,通过OGNL获取属性的值
  73. -->
  74. <select id="findUserList" parameterType="userQueryVo" resultType="user">
  75. select id,username,birthday,sex from user
  76. <!-- where标签相当 于where关键字,可以自动去除第一个and -->
  77. <where>
  78. <!-- 引用sql片段,如果sql片段和引用处不在同一个mapper必须前边加namespace -->
  79. <include refid="query_user_where"></include>
  80. <!-- 下边还有很其它的条件 -->
  81. <!-- <include refid="其它的sql片段"></include> -->
  82. </where>
  83. </select>
  84. <!-- 使用resultMap作结果映射
  85. resultMap:如果引用resultMap的位置和resultMap的定义在同一个mapper.xml,直接使用resultMap的id,如果不在同一个mapper.xml要在resultMap的id前边加namespace
  86. -->
  87. <select id="findUserListResultMap" parameterType="userQueryVo" resultMap="userListResultMap">
  88. select id id_,username username_,birthday birthday_ from user where username like '%${userCustom.username}%'
  89. </select>
  90. <!-- 输出简单类型
  91. 功能:自定义查询条件,返回查询记录个数,通常用于实现 查询分页
  92. -->
  93. <select id="findUserCount" parameterType="userQueryVo" resultType="int">
  94. select count(*) from user
  95. <where>
  96. <include refid="query_user_where"></include>
  97. </where>
  98. </select>
  99. <!-- 添加用户-->
  100. <insert id="insertUser" parameterType="cn.yzu.mybatis.po.User">
  101. <selectKey keyProperty="id" order="AFTER" resultType="int">
  102. select LAST_INSERT_ID()
  103. </selectKey>
  104. INSERT INTO USER(username,birthday,sex,address) VALUES(#{username},#{birthday},#{sex},#{address})
  105. </insert>
  106. </mapper>
  1. public class UserMapperTest {
  2. // 会话工厂
  3. private SqlSessionFactory sqlSessionFactory;
  4. // 创建工厂
  5. @Before
  6. public void init() throws IOException {
  7. String resource = "SqlMapConfig.xml";
  8. InputStream inputStream = Resources.getResourceAsStream(resource);
  9. sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
  10. }
  11. @Test
  12. public void testFindUserById() throws Exception {
  13. SqlSession sqlSession = sqlSessionFactory.openSession();
  14. // 创建代理对象
  15. UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
  16. User user = userMapper.findUserById(1);
  17. System.out.println(user);
  18. }
  19. @Test
  20. public void testFindUserByUsername() throws Exception {
  21. SqlSession sqlSession = sqlSessionFactory.openSession();
  22. UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
  23. List<User> list = userMapper.findUserByName("小明");
  24. System.out.println(list);
  25. }
  26. @Test
  27. public void testInsertUser() throws Exception {
  28. SqlSession sqlSession = sqlSessionFactory.openSession();
  29. UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
  30. User user = new User();
  31. user.setUsername("李奎123");
  32. userMapper.insertUser(user);
  33. sqlSession.commit();
  34. sqlSession.close();
  35. }
  36. // 通过包装类型查询用户信息
  37. @Test
  38. public void testFindUserList() throws Exception {
  39. SqlSession sqlSession = sqlSessionFactory.openSession();
  40. UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
  41. // 构造查询条件
  42. UserQueryVo userQueryVo = new UserQueryVo();
  43. UserCustom userCustom = new UserCustom();
  44. userCustom.setUsername("小明");
  45. userCustom.setSex("1");
  46. userQueryVo.setUserCustom(userCustom);
  47. //id集合
  48. List<Integer> ids = new ArrayList<Integer>();
  49. ids.add(16);
  50. ids.add(22);
  51. userQueryVo.setIds(ids);
  52. List<User> list = userMapper.findUserList(userQueryVo);
  53. sqlSession.close();
  54. System.out.println(list);
  55. }
  56. // 使用resultMap进行结果映射
  57. @Test
  58. public void testFindUserListResultMap() throws Exception {
  59. SqlSession sqlSession = sqlSessionFactory.openSession();
  60. UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
  61. UserQueryVo userQueryVo = new UserQueryVo();
  62. UserCustom userCustom = new UserCustom();
  63. userCustom.setUsername("小明");
  64. userQueryVo.setUserCustom(userCustom);
  65. List<User> list = userMapper.findUserListResultMap(userQueryVo);
  66. sqlSession.close();
  67. System.out.println(list);
  68. }
  69. // 返回查询记录总数
  70. @Test
  71. public void testFindUserCount() throws Exception {
  72. SqlSession sqlSession = sqlSessionFactory.openSession();
  73. UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
  74. UserQueryVo userQueryVo = new UserQueryVo();
  75. UserCustom userCustom = new UserCustom();
  76. userCustom.setUsername("小明");
  77. userQueryVo.setUserCustom(userCustom);
  78. //id集合
  79. List<Integer> ids = new ArrayList<Integer>();
  80. ids.add(16);
  81. ids.add(22);
  82. userQueryVo.setIds(ids);
  83. int count = userMapper.findUserCount(userQueryVo);
  84. sqlSession.close();
  85. System.out.println(count);
  86. }
  87. }

mybatis的mapper代理,SqlMapConfig.xml中配置,输入和输出映射使用案例的更多相关文章

  1. (转)MyBatis框架的学习(四)——Mapper.xml文件中的输入和输出映射以及动态sql

    http://blog.csdn.net/yerenyuan_pku/article/details/71893689 前面对MyBatis框架的学习中,我们对Mapper.xml映射文件多少有些了解 ...

  2. MyBatis探究-----核心配置文件mybatis-config.xml中配置mappers的几种方式

    1.package name="映射文件所在包名" 必须保证接口名(例如IUserDao)和xml名(IUserDao.xml)相同,还必须在同一个包中 例如:<packag ...

  3. mybatis学习记录三——SqlMapConfig.xml相关参数详解

      5       SqlMapConfig.xml mybatis的全局配置文件SqlMapConfig.xml,配置内容如下: properties(属性) settings(全局配置参数) ty ...

  4. 03.MyBatis的核心配置文件SqlMapConfig.xml

    SqlMapConfig.xml中配置的内容和顺序如下: properties(属性) settings(全局配置参数) typeAliases(类型别名) typeHandlers(类型处理器) o ...

  5. Mybatis(二)--SqlMapConfig.xml配置文件

    一.简介 SqlMapConfig.xml是Mybatis的全局配置文件,我们在写mybatis项目时,在SqlMapConfig.xml文件中主要配置了数据库数据源.事务.映射文件等,其实还有很多配 ...

  6. 【MyBatis学习05】SqlMapConfig.xml文件中的配置总结

    经过上两篇博文的总结,对mybatis中的dao开发方法和流程基本掌握了,这一节主要来总结一下mybatis中的全局配置文件SqlMapConfig.xml在开发中的一些常用配置,首先看一下该全局配置 ...

  7. Mybatis非mapper代理配置

    转: Mybatis非mapper代理配置 2017年04月26日 20:13:48 待长的小蘑菇 阅读数:870   版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog. ...

  8. Mybatis配置文件SqlMapConfig.xml中的标签

    SqlMapConfig.xml配置文件中的属性 1 配置内容 properties(属性) settings(全局配置参数) typeAliases(类型别名) typeHandlers(类型处理器 ...

  9. Mybatis -SqlMapConfig.xml环境配置

    SqlMapConfig.xml的配置内容和顺序如下(顺序不能乱): Properties(属性) Settings(全局参数设置) typeAliases(类型别名) typeHandlers(类型 ...

随机推荐

  1. 【代码笔记】iOS-屏幕根据键盘自动的变化高度

    一,效果图. 二,代码. ViewController.h #import <UIKit/UIKit.h> @interface ViewController : UIViewContro ...

  2. [基础知识]在PeopleSoft中SMTP设置不生效如何查找问题

    在PeopleSoft中如果配置了工作流邮件或者标准页面的通知,都是可以发送出邮件的,这些邮件都是由SMTP服务器发送.SMTP需要在APP服务器和PRCS服务器中配置. 如果无法从PeopleSof ...

  3. JavaScript写计算器

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  4. JetBrains PhpStorm 2017.2 x64 激活

    使用方法:激活时选择License server 填入http://idea.imsxm.com 点击Active即可

  5. Android之使用枚举利弊及替代方案

    Android上不应该使用枚举,占内存,应该使用@XXXDef注解来替代 使用 Enum 的缺点 每一个枚举值都是一个对象,在使用它时会增加额外的内存消耗,所以枚举相比与 Integer 和 Stri ...

  6. Android网络编程系列之Volley总结

    前言 Volley的中文翻译为“齐射.并发”,是在2013年的Google大会上发布的一款Android平台网络通信库,具有网络请求的处理.小图片的异步加载和缓存等功能,能够帮助 Android AP ...

  7. Hive创建指向HBase表的表

    create [external] table t1(id int, value string) stored by 'org.apache.hadoop.hive.hbase.HBaseStorag ...

  8. Mac逆向--思维导图

  9. HDFS Lease Recovey 和 Block Recovery

    这篇分析一下Lease Recovery 和 Block Recovery hdfs支持hflush后,需要保证hflush的数据被读到,datanode重启不能简单的丢弃文件的最后一个block,而 ...

  10. VS2010/2013 运行是很卡的加速方案

    前段时间为了一个项目而把VS2008换成了VS2010,结果原本就不堪重负的本本跑起VS2010来那更是慢得没话说,于是看了遍VS2010选项,又从网上到处找资料找优化方法,总算使我的VS2010跑得 ...