mybatis的mapper代理,SqlMapConfig.xml中配置,输入和输出映射使用案例
- public class User {
- private int id;
- private String username;// 用户姓名
- private String sex;// 性别
- private Date birthday;// 生日
- private String address;// 地址
- public int getId() {
- return id;
- }
- public void setId(int id) {
- this.id = id;
- }
- public String getUsername() {
- return username;
- }
- public void setUsername(String username) {
- this.username = username;
- }
- public String getSex() {
- return sex;
- }
- public void setSex(String sex) {
- this.sex = sex;
- }
- public Date getBirthday() {
- return birthday;
- }
- public void setBirthday(Date birthday) {
- this.birthday = birthday;
- }
- public String getAddress() {
- return address;
- }
- public void setAddress(String address) {
- this.address = address;
- }
- @Override
- public String toString() {
- return "User [id=" + id + ", username=" + username + ", sex=" + sex
- + ", birthday=" + birthday + ", address=" + address + "]";
- }
- }
User.java
- public class UserCustom extends User {
- //添加一些扩展字段
- }
UserCustom
- public class UserQueryVo {
- //用户信息
- private User user;
- //自定义user的扩展对象
- private UserCustom userCustom;
- //用户id集合
- private List<Integer> ids;
- public User getUser() {
- return user;
- }
- public void setUser(User user) {
- this.user = user;
- }
- public UserCustom getUserCustom() {
- return userCustom;
- }
- public void setUserCustom(UserCustom userCustom) {
- this.userCustom = userCustom;
- }
- public List<Integer> getIds() {
- return ids;
- }
- public void setIds(List<Integer> ids) {
- this.ids = ids;
- }
- }
UserQueryVo
- <!DOCTYPE configuration
- PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
- "http://mybatis.org/dtd/mybatis-3-config.dtd">
- <configuration>
- <properties resource="db.properties"></properties>
- <!-- 定义 别名 -->
- <typeAliases>
- <!--
- 单个别名的定义
- alias:别名,type:别名映射的类型 -->
- <!-- <typeAlias type="cn.itcast.mybatis.po.User" alias="user"/> -->
- <!-- 批量别名定义
- 指定包路径,自动扫描包下边的pojo,定义别名,别名默认为类名(首字母小写或大写)
- -->
- <package name="cn.itcast.mybatis.po"/>
- </typeAliases>
- <!-- 和spring整合后 environments配置将废除-->
- <environments default="development">
- <environment id="development">
- <!-- 使用jdbc事务管理-->
- <transactionManager type="JDBC" />
- <!-- 数据库连接池-->
- <dataSource type="POOLED">
- <property name="driver" value="${jdbc.driver}"/>
- <property name="url" value="${jdbc.url}"/>
- <property name="username" value="${jdbc.username}"/>
- <property name="password" value="${jdbc.password}"/>
- </dataSource>
- </environment>
- </environments>
- <!--加载mapper映射
- 如果将和spring整合后,可以使用整合包中提供的mapper扫描器,此处的mappers不用配置了。
- -->
- <mappers>
- <package name="cn.yzu.mybatis.mapper"/>
- </mappers>
- </configuration>
- public interface UserMapper {
- //根据用户id查询用户信息
- public User findUserById(int id) throws Exception;
- //根据用户名称 查询用户信息
- public List<User> findUserByName(String username) throws Exception;
- //自定义查询条件查询用户信息
- public List<User> findUserList(UserQueryVo userQueryVo) throws Exception;
- //查询用户,使用resultMap进行映射
- public List<User> findUserListResultMap(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;
- //修改用户
- public void updateUser(User user) throws Exception;
- }
UserMapper
- <?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语句进行隔离,方便管理 ,mapper开发dao方式,使用namespace有特殊作用
- mapper代理开发时将namespace指定为mapper接口的全限定名
- -->
- <mapper namespace="cn.yzu.mybatis.mapper.UserMapper">
- <!-- 在mapper.xml文件中配置很多的sql语句,执行每个sql语句时,封装为MappedStatement对象
- mapper.xml以statement为单位管理sql语句
- -->
- <!-- 将用户查询条件定义为sql片段
- 建议对单表的查询条件单独抽取sql片段,提高公用性
- 注意:不要将where标签放在sql片段
- -->
- <sql id="query_user_where">
- <!-- 如果 userQueryVo中传入查询条件,再进行sql拼接-->
- <!-- test中userCustom.username表示从userQueryVo读取属性值-->
- <if test="userCustom!=null">
- <if test="userCustom.username!=null and userCustom.username!=''">
- and username like '%${userCustom.username}%'
- </if>
- <if test="userCustom.sex!=null and userCustom.sex!=''">
- and sex = #{userCustom.sex}
- </if>
- <!-- 根据id集合查询用户信息 -->
- <!-- 最终拼接的效果:
- SELECT id ,username ,birthday FROM USER WHERE username LIKE '%小明%' AND id IN (16,22,25)
- collection:集合的属性
- open:开始循环拼接的串
- close:结束循环拼接的串
- item:每次循环取到的对象
- separator:每两次循环中间拼接的串
- -->
- <foreach collection="ids" open=" AND id IN ( " close=")" item="id" separator=",">
- #{id}
- </foreach>
- <!--
- SELECT id ,username ,birthday FROM USER WHERE username LIKE '%小明%' AND (id = 16 OR id = 22 OR id = 25)
- <foreach collection="ids" open=" AND ( " close=")" item="id" separator="OR">
- id = #{id}
- </foreach>
- -->
- <!-- 还有很多的查询条件 -->
- </if>
- </sql>
- <!-- 定义resultMap,列名和属性名映射配置
- id:mapper.xml中的唯一标识
- type:最终要映射的pojo类型
- -->
- <resultMap id="userListResultMap" type="user" >
- <!-- 列名
- id_,username_,birthday_
- id:要映射结果集的唯 一标识 ,称为主键
- column:结果集的列名
- property:type指定的哪个属性中
- -->
- <id column="id_" property="id"/>
- <!-- result就是普通列的映射配置 -->
- <result column="username_" property="username"/>
- <result column="birthday_" property="birthday"/>
- </resultMap>
- <!-- 根据id查询用户信息 -->
- <select id="findUserById" parameterType="int" resultType="user">
- SELECT * FROM USER WHERE id= #{id}
- </select>
- <!-- 根据用户名称查询用户信息,可能返回多条-->
- <select id="findUserByName" parameterType="java.lang.String" resultType="cn.yzu.mybatis.po.User">
- select * from user where username like '%${value}%'
- </select>
- <!-- 自定义查询条件查询用户的信息
- %${userCustom.username}%:userCustom是userQueryVo中的属性,通过OGNL获取属性的值
- -->
- <select id="findUserList" parameterType="userQueryVo" resultType="user">
- select id,username,birthday,sex from user
- <!-- where标签相当 于where关键字,可以自动去除第一个and -->
- <where>
- <!-- 引用sql片段,如果sql片段和引用处不在同一个mapper必须前边加namespace -->
- <include refid="query_user_where"></include>
- <!-- 下边还有很其它的条件 -->
- <!-- <include refid="其它的sql片段"></include> -->
- </where>
- </select>
- <!-- 使用resultMap作结果映射
- resultMap:如果引用resultMap的位置和resultMap的定义在同一个mapper.xml,直接使用resultMap的id,如果不在同一个mapper.xml要在resultMap的id前边加namespace
- -->
- <select id="findUserListResultMap" parameterType="userQueryVo" resultMap="userListResultMap">
- select id id_,username username_,birthday birthday_ from user where username like '%${userCustom.username}%'
- </select>
- <!-- 输出简单类型
- 功能:自定义查询条件,返回查询记录个数,通常用于实现 查询分页
- -->
- <select id="findUserCount" parameterType="userQueryVo" resultType="int">
- select count(*) from user
- <where>
- <include refid="query_user_where"></include>
- </where>
- </select>
- <!-- 添加用户-->
- <insert id="insertUser" parameterType="cn.yzu.mybatis.po.User">
- <selectKey keyProperty="id" order="AFTER" resultType="int">
- select LAST_INSERT_ID()
- </selectKey>
- INSERT INTO USER(username,birthday,sex,address) VALUES(#{username},#{birthday},#{sex},#{address})
- </insert>
- </mapper>
- public class UserMapperTest {
- // 会话工厂
- private SqlSessionFactory sqlSessionFactory;
- // 创建工厂
- @Before
- public void init() throws IOException {
- String resource = "SqlMapConfig.xml";
- InputStream inputStream = Resources.getResourceAsStream(resource);
- sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
- }
- @Test
- public void testFindUserById() throws Exception {
- SqlSession sqlSession = sqlSessionFactory.openSession();
- // 创建代理对象
- UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
- User user = userMapper.findUserById(1);
- System.out.println(user);
- }
- @Test
- public void testFindUserByUsername() throws Exception {
- SqlSession sqlSession = sqlSessionFactory.openSession();
- UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
- List<User> list = userMapper.findUserByName("小明");
- System.out.println(list);
- }
- @Test
- public void testInsertUser() throws Exception {
- SqlSession sqlSession = sqlSessionFactory.openSession();
- UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
- User user = new User();
- user.setUsername("李奎123");
- userMapper.insertUser(user);
- sqlSession.commit();
- sqlSession.close();
- }
- // 通过包装类型查询用户信息
- @Test
- public void testFindUserList() throws Exception {
- SqlSession sqlSession = sqlSessionFactory.openSession();
- UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
- // 构造查询条件
- UserQueryVo userQueryVo = new UserQueryVo();
- UserCustom userCustom = new UserCustom();
- userCustom.setUsername("小明");
- userCustom.setSex("1");
- userQueryVo.setUserCustom(userCustom);
- //id集合
- List<Integer> ids = new ArrayList<Integer>();
- ids.add(16);
- ids.add(22);
- userQueryVo.setIds(ids);
- List<User> list = userMapper.findUserList(userQueryVo);
- sqlSession.close();
- System.out.println(list);
- }
- // 使用resultMap进行结果映射
- @Test
- public void testFindUserListResultMap() throws Exception {
- SqlSession sqlSession = sqlSessionFactory.openSession();
- UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
- UserQueryVo userQueryVo = new UserQueryVo();
- UserCustom userCustom = new UserCustom();
- userCustom.setUsername("小明");
- userQueryVo.setUserCustom(userCustom);
- List<User> list = userMapper.findUserListResultMap(userQueryVo);
- sqlSession.close();
- System.out.println(list);
- }
- // 返回查询记录总数
- @Test
- public void testFindUserCount() throws Exception {
- SqlSession sqlSession = sqlSessionFactory.openSession();
- UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
- UserQueryVo userQueryVo = new UserQueryVo();
- UserCustom userCustom = new UserCustom();
- userCustom.setUsername("小明");
- userQueryVo.setUserCustom(userCustom);
- //id集合
- List<Integer> ids = new ArrayList<Integer>();
- ids.add(16);
- ids.add(22);
- userQueryVo.setIds(ids);
- int count = userMapper.findUserCount(userQueryVo);
- sqlSession.close();
- System.out.println(count);
- }
- }
mybatis的mapper代理,SqlMapConfig.xml中配置,输入和输出映射使用案例的更多相关文章
- (转)MyBatis框架的学习(四)——Mapper.xml文件中的输入和输出映射以及动态sql
http://blog.csdn.net/yerenyuan_pku/article/details/71893689 前面对MyBatis框架的学习中,我们对Mapper.xml映射文件多少有些了解 ...
- MyBatis探究-----核心配置文件mybatis-config.xml中配置mappers的几种方式
1.package name="映射文件所在包名" 必须保证接口名(例如IUserDao)和xml名(IUserDao.xml)相同,还必须在同一个包中 例如:<packag ...
- mybatis学习记录三——SqlMapConfig.xml相关参数详解
5 SqlMapConfig.xml mybatis的全局配置文件SqlMapConfig.xml,配置内容如下: properties(属性) settings(全局配置参数) ty ...
- 03.MyBatis的核心配置文件SqlMapConfig.xml
SqlMapConfig.xml中配置的内容和顺序如下: properties(属性) settings(全局配置参数) typeAliases(类型别名) typeHandlers(类型处理器) o ...
- Mybatis(二)--SqlMapConfig.xml配置文件
一.简介 SqlMapConfig.xml是Mybatis的全局配置文件,我们在写mybatis项目时,在SqlMapConfig.xml文件中主要配置了数据库数据源.事务.映射文件等,其实还有很多配 ...
- 【MyBatis学习05】SqlMapConfig.xml文件中的配置总结
经过上两篇博文的总结,对mybatis中的dao开发方法和流程基本掌握了,这一节主要来总结一下mybatis中的全局配置文件SqlMapConfig.xml在开发中的一些常用配置,首先看一下该全局配置 ...
- Mybatis非mapper代理配置
转: Mybatis非mapper代理配置 2017年04月26日 20:13:48 待长的小蘑菇 阅读数:870 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog. ...
- Mybatis配置文件SqlMapConfig.xml中的标签
SqlMapConfig.xml配置文件中的属性 1 配置内容 properties(属性) settings(全局配置参数) typeAliases(类型别名) typeHandlers(类型处理器 ...
- Mybatis -SqlMapConfig.xml环境配置
SqlMapConfig.xml的配置内容和顺序如下(顺序不能乱): Properties(属性) Settings(全局参数设置) typeAliases(类型别名) typeHandlers(类型 ...
随机推荐
- 【代码笔记】iOS-屏幕根据键盘自动的变化高度
一,效果图. 二,代码. ViewController.h #import <UIKit/UIKit.h> @interface ViewController : UIViewContro ...
- [基础知识]在PeopleSoft中SMTP设置不生效如何查找问题
在PeopleSoft中如果配置了工作流邮件或者标准页面的通知,都是可以发送出邮件的,这些邮件都是由SMTP服务器发送.SMTP需要在APP服务器和PRCS服务器中配置. 如果无法从PeopleSof ...
- JavaScript写计算器
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- JetBrains PhpStorm 2017.2 x64 激活
使用方法:激活时选择License server 填入http://idea.imsxm.com 点击Active即可
- Android之使用枚举利弊及替代方案
Android上不应该使用枚举,占内存,应该使用@XXXDef注解来替代 使用 Enum 的缺点 每一个枚举值都是一个对象,在使用它时会增加额外的内存消耗,所以枚举相比与 Integer 和 Stri ...
- Android网络编程系列之Volley总结
前言 Volley的中文翻译为“齐射.并发”,是在2013年的Google大会上发布的一款Android平台网络通信库,具有网络请求的处理.小图片的异步加载和缓存等功能,能够帮助 Android AP ...
- Hive创建指向HBase表的表
create [external] table t1(id int, value string) stored by 'org.apache.hadoop.hive.hbase.HBaseStorag ...
- Mac逆向--思维导图
- HDFS Lease Recovey 和 Block Recovery
这篇分析一下Lease Recovery 和 Block Recovery hdfs支持hflush后,需要保证hflush的数据被读到,datanode重启不能简单的丢弃文件的最后一个block,而 ...
- VS2010/2013 运行是很卡的加速方案
前段时间为了一个项目而把VS2008换成了VS2010,结果原本就不堪重负的本本跑起VS2010来那更是慢得没话说,于是看了遍VS2010选项,又从网上到处找资料找优化方法,总算使我的VS2010跑得 ...