1.mybatis动态sql
1.1 if
1.2 trim
1.3 foreach
1.4 其他
choose/set/where
2.模糊查询(3种方式)
2.1 参数中直接加入%%
2.2 使用${...}代替#{...}(不建议使用该方式,有SQL注入风险)
关键:#{...}与${...}区别?
参数类型为字符串,#会在前后加单引号['],$则直接插入值
注:
1) mybatis中使用OGNL表达式传递参数
2) 优先使用#{...}
3) ${...}方式存在SQL注入风险
2.3 SQL字符串拼接CONCAT
3.查询返回结果集
resultMap:适合使用返回值是自定义实体类的情况
resultType:适合使用返回值的数据类型是非自定义的,即jdk的提供的类型
3.1 使用resultMap返回自定义类型集合
3.2 使用resultType返回List<T>
3.3 使用resultType返回单个对象
3.4 使用resultType返回List<Map>,适用于多表查询返回结果集
3.5 使用resultType返回Map<String,Object>,适用于多表查询返回单个结果集
4.分页查询
为什么要重写mybatis的分页?
Mybatis的分页功能很弱,它是基于内存的分页(查出所有记录再按偏移量offset和边界limit取结果),在大数据量的情况下这样的分页基本上是没有用的
4.1 导入分页插件
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.1.2</version>
</dependency>
4.2 将pagehelper插件配置到mybatis中
<!-- 配置分页插件PageHelper, 4.0.0以后的版本支持自动识别使用的数据库 -->
<plugin interceptor="com.github.pagehelper.PageInterceptor">
</plugin>
4.3 在你需要进行分页的Mybatis方法前调用PageHelper.startPage静态方法即可,紧跟在这个方法后的第一个Mybatis查询方法会被进行分页
if (null != pageBean && pageBean.isPaginate()) {
PageHelper.startPage(pageBean.getCurPage(), pageBean.getPageRecord());
}
4.4 获取分页信息(二种方式)
4.4.1 使用插件后,查询实际返回的是Page<E>,而非List<E>,Page继承了ArrayList,同时还包含分页相关的信息
Page<Book> page = (Page<Book>)list;
System.out.println("页码:" + page.getPageNum());
System.out.println("页大小:" + page.getPageSize());
System.out.println("总记录:" + page.getTotal());
4.4.2 使用PageInfo
PageInfo pageInfo = new PageInfo(list);
System.out.println("页码:" + pageInfo.getPageNum());
System.out.println("页大小:" + pageInfo.getPageSize());
System.out.println("总记录:" + pageInfo.getTotal());
5.特殊字符处理
>(>)
<(<)
&(&)
空格( )
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
今日测试方法与对象
对象:
User.class
package com.zking.Mybatis.model;
import lombok.ToString;
@ToString
public class User {
private Long usrId;
private String usrName;
private String usrPassword;
private Long usrRoleId;
private Integer usrFlag;
public User(Long usrId, String usrName, String usrPassword, Long usrRoleId, Integer usrFlag) {
this.usrId = usrId;
this.usrName = usrName;
this.usrPassword = usrPassword;
this.usrRoleId = usrRoleId;
this.usrFlag = usrFlag;
}
public User() {
super();
}
public Long getUsrId() {
return usrId;
}
public void setUsrId(Long usrId) {
this.usrId = usrId;
}
public String getUsrName() {
return usrName;
}
public void setUsrName(String usrName) {
this.usrName = usrName;
}
public String getUsrPassword() {
return usrPassword;
}
public void setUsrPassword(String usrPassword) {
this.usrPassword = usrPassword;
}
public Long getUsrRoleId() {
return usrRoleId;
}
public void setUsrRoleId(Long usrRoleId) {
this.usrRoleId = usrRoleId;
}
public Integer getUsrFlag() {
return usrFlag;
}
public void setUsrFlag(Integer usrFlag) {
this.usrFlag = usrFlag;
}
}
UserVo.class:
package com.zking.Mybatis.vo;
import com.zking.Mybatis.model.User;
import lombok.ToString;
import java.util.List;
/**
* @author cjl
* @site www.xiaomage.com
* @company
* @create 2018-12-15 14:59
*/
@ToString
public class UserVo extends User {
private List<Integer> userIds;
private Integer min_role_id;
private Integer max_role_id;
public UserVo() {
}
public List<Integer> getUserIds() {
return userIds;
}
public void setUserIds(List<Integer> userIds) {
this.userIds = userIds;
}
public Integer getMin_role_id() {
return min_role_id;
}
public void setMin_role_id(Integer min_role_id) {
this.min_role_id = min_role_id;
}
public Integer getMax_role_id() {
return max_role_id;
}
public void setMax_role_id(Integer max_role_id) {
this.max_role_id = max_role_id;
}
}
配置文件:UserMapper .class
package com.zking.Mybatis.mapper;
import com.zking.Mybatis.model.User;
import com.zking.Mybatis.util.PageBean;
import com.zking.Mybatis.vo.UserVo;
import java.util.List;
import java.util.Map;
public interface UserMapper {
/**
* 删除用户
* @param usrId
* @return
*/
int deleteByPrimaryKey(Long usrId);
/**
* 新增用户
* @param record
* @return
*/
int insert(User record);
/**
* 根据条件新增用户
* @param record
* @return
*/
int insertSelective(User record);
/**
* 根据用户id查询用户
* @param usrId
* @return
*/
User selectByPrimaryKey(Long usrId);
/**
* 根据用户id修改用户部分信息
* @param record
* @return
*/
int updateByPrimaryKeySelective(User record);
/**
* 根据用户id修改用户所有信息
* @param record
* @return
*/
int updateByPrimaryKey(User record);
/**
* foreach 标签
* @param user
* @return
*/
List<User> selectUser(UserVo userVo);
/**
* 模糊查询
* @param user
* @return
*/
List<User> selectUser2(User user);
/**
*使用resultMap返回自定义类型集合
* @param user
* @return
*/
List<User> selectUser3(User user);
/**
* 使用resultType返回List<T>
* @param user
* @return
*/
List<User> selectUser4(User user);
/**
* 使用resultType返回List<Map>,适用于多表查询返回结果集
* 无论返回单条记录,还是多条记录,mybatis会自动给你封装
* @param
* @return
*/
List<Map> selectUser5();
/**
* 使用resultType返回Map<String,Object>,适用于多表查询返回单个结果集
* @param map
* @return
*/
Map UserOne(Map map);
/**
* 分页查询
* @param user
* @param pageBean
* @return
*/
List<User> list7(User user);
/**
* 特殊字符处理
* @param userVo
* @return
*/
List<User> list8(UserVo userVo);
}
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" >
<mapper namespace="com.zking.Mybatis.mapper.UserMapper" >
<resultMap id="BaseResultMap" type="com.zking.Mybatis.model.User" >
<constructor >
<idArg column="usr_id" jdbcType="BIGINT" javaType="java.lang.Long" />
<arg column="usr_name" jdbcType="VARCHAR" javaType="java.lang.String" />
<arg column="usr_password" jdbcType="VARCHAR" javaType="java.lang.String" />
<arg column="usr_role_id" jdbcType="BIGINT" javaType="java.lang.Long" />
<arg column="usr_flag" jdbcType="INTEGER" javaType="java.lang.Integer" />
</constructor>
</resultMap>
<sql id="Base_Column_List" >
usr_id, usr_name, usr_password, usr_role_id, usr_flag
</sql>
<select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Long" >
select
<include refid="Base_Column_List" />
from sys_user
where usr_id = #{usrId,jdbcType=BIGINT}
</select>
<select id="selectUser" parameterType="com.zking.Mybatis.vo.UserVo" resultType="com.zking.Mybatis.model.User">
select
<include refid="Base_Column_List" />
from sys_user
where usr_id in
<foreach collection="userIds" item="usr_id" open="(" close=")" separator=",">
#{usr_id}
</foreach>
</select>
<select id="selectUser2" parameterType="com.zking.Mybatis.model.User" resultType="com.zking.Mybatis.model.User">
select
<include refid="Base_Column_List" />
from sys_user
where usr_name like #{usrName}
</select>
<select id="selectUser3" parameterType="com.zking.Mybatis.model.User" resultMap="BaseResultMap">
select
<include refid="Base_Column_List" />
from sys_user
</select>
<select id="selectUser4" parameterType="com.zking.Mybatis.model.User" resultType="com.zking.Mybatis.model.User">
select
<include refid="Base_Column_List" />
from sys_user
</select>
<select id="selectUser5" parameterType="java.util.Map" resultType="java.util.Map">
select
<include refid="Base_Column_List" />
from sys_user
</select>
<select id="UserOne" parameterType="java.util.Map" resultType="java.util.HashMap">
select
<include refid="Base_Column_List" />
from sys_user
where usr_id = #{usr_id}
</select>
<select id="list7" parameterType="com.zking.Mybatis.model.User" resultType="com.zking.Mybatis.model.User">
select
<include refid="Base_Column_List" />
from sys_user
where 1=1
<if test="usrName != null" >
and usr_name like #{usrName}
</if>
</select>
<select id="list8" resultType="com.zking.Mybatis.model.User">
select
<include refid="Base_Column_List" />
from sys_user
where 1=1
and usr_role_id > #{min_role_id}
and usr_role_id < #{max_role_id}
</select>
<delete id="deleteByPrimaryKey" parameterType="java.lang.Long" >
delete from sys_user
where usr_id = #{usrId,jdbcType=BIGINT}
</delete>
<insert id="insert" parameterType="com.zking.Mybatis.model.User" >
insert into sys_user (usr_id, usr_name, usr_password,
usr_role_id, usr_flag)
values (#{usrId,jdbcType=BIGINT}, #{usrName,jdbcType=VARCHAR}, #{usrPassword,jdbcType=VARCHAR},
#{usrRoleId,jdbcType=BIGINT}, #{usrFlag,jdbcType=INTEGER})
</insert>
<insert id="insertSelective" parameterType="com.zking.Mybatis.model.User" >
insert into sys_user
<trim prefix="(" suffix=")" suffixOverrides="," >
<if test="usrId != null" >
usr_id,
</if>
<if test="usrName != null" >
usr_name,
</if>
<if test="usrPassword != null" >
usr_password,
</if>
<if test="usrRoleId != null" >
usr_role_id,
</if>
<if test="usrFlag != null" >
usr_flag,
</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides="," >
<if test="usrId != null" >
#{usrId,jdbcType=BIGINT},
</if>
<if test="usrName != null" >
#{usrName,jdbcType=VARCHAR},
</if>
<if test="usrPassword != null" >
#{usrPassword,jdbcType=VARCHAR},
</if>
<if test="usrRoleId != null" >
#{usrRoleId,jdbcType=BIGINT},
</if>
<if test="usrFlag != null" >
#{usrFlag,jdbcType=INTEGER},
</if>
</trim>
</insert>
<update id="updateByPrimaryKeySelective" parameterType="com.zking.Mybatis.model.User" >
update sys_user
<set >
<if test="usrName != null" >
usr_name = #{usrName,jdbcType=VARCHAR},
</if>
<if test="usrPassword != null" >
usr_password = #{usrPassword,jdbcType=VARCHAR},
</if>
<if test="usrRoleId != null" >
usr_role_id = #{usrRoleId,jdbcType=BIGINT},
</if>
<if test="usrFlag != null" >
usr_flag = #{usrFlag,jdbcType=INTEGER},
</if>
</set>
where usr_id = #{usrId,jdbcType=BIGINT}
</update>
<update id="updateByPrimaryKey" parameterType="com.zking.Mybatis.model.User" >
update sys_user
set usr_name = #{usrName,jdbcType=VARCHAR},
usr_password = #{usrPassword,jdbcType=VARCHAR},
usr_role_id = #{usrRoleId,jdbcType=BIGINT},
usr_flag = #{usrFlag,jdbcType=INTEGER}
where usr_id = #{usrId,jdbcType=BIGINT}
</update>
</mapper>
UserService .class
package com.zking.Mybatis.service;
import com.zking.Mybatis.model.User;
import com.zking.Mybatis.util.PageBean;
import com.zking.Mybatis.vo.UserVo;
import java.util.List;
import java.util.Map;
/**
* @author cjl
* @site www.xiaomage.com
* @company
* @create 2018-12-15 11:58
*/
public interface UserService {
/**
* 删除用户
* @param usrId
* @return
*/
int deleteByPrimaryKey(Long usrId);
/**
* 新增用户
* @param record
* @return
*/
int insert(User record);
/**
* 根据条件新增用户
* @param record
* @return
*/
int insertSelective(User record);
/**
* 根据用户id查询用户
* @param usrId
* @return
*/
User selectByPrimaryKey(Long usrId);
/**
* 根据用户id修改用户部分信息
* @param record
* @return
*/
int updateByPrimaryKeySelective(User record);
/**
* 根据用户id修改用户所有信息
* @param record
* @return
*/
int updateByPrimaryKey(User record);
/**
* foreach 标签
* @param user
* @return
*/
List<User> selectUser(UserVo userVo);
/**
* 模糊查询
* @param user
* @return
*/
List<User> selectUser2(User user);
/**
*使用resultMap返回自定义类型集合
* @param user
* @return
*/
List<User> selectUser3(User user);
/**
* 使用resultType返回List<T>
* @param user
* @return
*/
List<User> selectUser4(User user);
/**
* 使用resultType返回List<Map>,适用于多表查询返回结果集
* 无论返回单条记录,还是多条记录,mybatis会自动给你封装
* @param
* @return
*/
List<Map> selectUser5();
/**
* 使用resultType返回Map<String,Object>,适用于多表查询返回单个结果集
* @param map
* @return
*/
Map UserOne(Map map);
/**
* 分页查询
* @param user
* @param pageBean
* @return
*/
List<User> list7(User user);
/**
* 特殊字符处理
* @param userVo
* @return
*/
List<User> list8(UserVo userVo);
}
UserServiceImpl .class(有部分方法没有用)
package com.zking.Mybatis.service.impl;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.zking.Mybatis.mapper.UserMapper;
import com.zking.Mybatis.model.User;
import com.zking.Mybatis.service.UserService;
import com.zking.Mybatis.util.PageBean;
import com.zking.Mybatis.vo.UserVo;
import java.util.List;
import java.util.Map;
/**
* @author cjl
* @site www.xiaomage.com
* @company
* @create 2018-12-15 12:00
*/
public class UserServiceImpl implements UserService {
private UserMapper userMapper;
public UserMapper getUserMapper() {
return userMapper;
}
public void setUserMapper(UserMapper userMapper) {
this.userMapper = userMapper;
}
/**
* 删除用户
*
* @param usrId
* @return
*/
@Override
public int deleteByPrimaryKey(Long usrId) {
return 0;
}
@Override
public int insert(User record) {
return userMapper.insert(record);
}
/**
* 根据条件新增用户
*
* @param record
* @return
*/
@Override
public int insertSelective(User record) {
return 0;
}
@Override
public User selectByPrimaryKey(Long usrId) {
return userMapper.selectByPrimaryKey(usrId);
}
/**
* 根据用户id修改用户部分信息
*
* @param record
* @return
*/
@Override
public int updateByPrimaryKeySelective(User record) {
return 0;
}
/**
* 根据用户id修改用户所有信息
*
* @param record
* @return
*/
@Override
public int updateByPrimaryKey(User record) {
return 0;
}
@Override
public List<User> selectUser(UserVo userVo) {
return userMapper.selectUser(userVo);
}
@Override
public List<User> selectUser2(User user) {
return userMapper.selectUser2(user);
}
@Override
public List<User> selectUser3(User user) {
return userMapper.selectUser3(user);
}
@Override
public List<User> selectUser4(User user) {
return userMapper.selectUser4(user);
}
@Override
public List<Map> selectUser5() {
return userMapper.selectUser5();
}
@Override
public Map UserOne(Map map) {
return userMapper.UserOne(map);
}
/**
* 分页查询
*
* @param user
* @return
*/
@Override
public List<User> list7(User user) {
return null;
}
@Override
public List<User> list7(User user, PageBean pageBean) {
if(pageBean !=null && pageBean.isPagination()){
PageHelper.startPage(pageBean.getPage(),pageBean.getRows());
}
List<User> users = this.userMapper.list7(user);
System.out.println(users.getClass());
if(pageBean !=null && pageBean.isPagination()){
PageInfo pageInfo = new PageInfo(users);
pageBean.setTotal(pageInfo.getTotal()+"");
}
return users;
}
@Override
public List<User> list8(UserVo userVo) {
return userMapper.list8(userVo);
}
}
UserServiceImplTes.class
package com.zking.Mybatis.service.impl;
import com.zking.Mybatis.mapper.UserMapper;
import com.zking.Mybatis.model.User;
import com.zking.Mybatis.service.UserService;
import com.zking.Mybatis.util.PageBean;
import com.zking.Mybatis.util.SessionUtil;
import com.zking.Mybatis.vo.UserVo;
import org.apache.ibatis.session.SqlSession;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @author cjl
* @site www.xiaomage.com
* @company
* @create 2018-12-15 12:02
*/
public class UserServiceImplTest {
private SqlSession sqlSession;
private UserService userService;
@Before
public void setUp() throws Exception {
sqlSession = SessionUtil.openSession();
UserServiceImpl userServiceImpl = new UserServiceImpl();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
userServiceImpl.setUserMapper(userMapper);
userService = userServiceImpl;
}
@After
public void tearDown() throws Exception {
sqlSession.commit();
sqlSession.close();
}
@Test
public void insert() {
User user = new User();
user.setUsrId(7l);
user.setUsrName("廧");
user.setUsrPassword("147258369");
user.setUsrFlag(2);
user.setUsrRoleId(2l);
this.userService.insert(user);
}
@Test
public void selectByPrimaryKey() {
User user = this.userService.selectByPrimaryKey(7l);
System.out.println(user);
}
@Test
public void selectUser() {
UserVo userVo = new UserVo();
userVo.setUserIds(Arrays.asList(new Integer[]{1,2,5}));
List<User> users = this.userService.selectUser(userVo);
for (User user : users) {
System.out.println(user);
}
}
@Test
public void selectUser2() {
User user = new User();
user.setUsrName("%a%");
List<User> users = this.userService.selectUser2(user);
for (User u : users) {
System.out.println(u);
}
}
@Test
public void selectUser3() {
List<User> users = this.userService.selectUser3(null);
for (User u : users) {
System.out.println(u);
}
}
@Test
public void selectUser4() {
List<User> users = this.userService.selectUser4(null);
for (User u : users) {
System.out.println(u);
}
}
@Test
public void selectUser5() {
List<Map> maps = this.userService.selectUser5();
for (Map map : maps) {
System.out.println(map);
}
}
@Test
public void UserOne() {
Map map= new HashMap();
map.put("usr_id",4);
Map map1 = this.userService.UserOne(map);
System.out.println(map1);
}
@Test
public void list7() {
User user =new User();
user.setUsrName("%a%");
PageBean pageBean = new PageBean();
List<User> users = this.userService.list7(user, pageBean);
for (User user1 : users) {
System.out.println(user1);
}
}
@Test
public void list8() {
UserVo userVo =new UserVo();
userVo.setMin_role_id(1);
userVo.setMax_role_id(4);
List<User> users = this.userService.list8(userVo);
for (User user : users) {
System.out.println(user);
}
}
}