06 Mybatis 使用xml配置映射模式+动态SQL---使用案例
1.项目结构

2.数据库表User对应的实体类
package domain; import java.io.Serializable;
import java.util.Date; /**
* 数据库表对应的实体类
*/
public class User implements Serializable {
//实体类的成员变量名称应该与数据库中的列名一致
private Integer id;
private String username;
private Date birthday;
private String sex;
private String address; public Integer getId() {
return id;
} public void setId(Integer id) {
this.id = id;
} public String getUsername() {
return username;
} public void setUsername(String username) {
this.username = username;
} public Date getBirthday() {
return birthday;
} public void setBirthday(Date birthday) {
this.birthday = birthday;
} public String getSex() {
return sex;
} public void setSex(String sex) {
this.sex = sex;
} public String getAddress() {
return address;
} public void setAddress(String address) {
this.address = address;
} @Override
public String toString() {
return "User{" +
"id=" + id +
", username='" + username + '\'' +
", birthday=" + birthday +
", sex='" + sex + '\'' +
", address='" + address + '\'' +
'}';
}
}
3.查询条件javabean
package domain; import java.util.List; /**
* 查询条件实体类
*/
public class QueryCondition {
private User user; public List<Integer> getIds() {
return ids;
} public void setIds(List<Integer> ids) {
this.ids = ids;
} private List<Integer> ids; public User getUser() {
return user;
} public void setUser(User user) {
this.user = user;
}
}
4.操作数据库的接口IUserDao.java
package dao; import domain.QueryCondition;
import domain.User; import java.util.List; /**
*
*/
public interface IUserDao {
/**
* 查询所有
* @return
*/
List<User> findAll(); /**
* 保存用户
* @param user
*/
void saveUser(User user); /**
* 更新操作
* @param user
*/
void updateUser(User user); /**
* 删除操作
* @param userId 用户id
*/
void deleteUser(Integer userId); /**
* 根据用户id查询
* @param userId 用户id
*/
User queryById(Integer userId); /**
* 根据用户名进行模糊查询
* @param username 用户名
* @return 查询结果
*/
List<User> queryByName(String username); /**
* 获取用户的总记录数
* @return
*/
int queryTotalCount(); /**
* 根据查询条件对象(由实体类生成)进行查询
* @param queryConditon 查询条件
* @return
*/
List<User> queryByQueryConditionObject(QueryCondition queryConditon); /**
* 根据传入参数条件
* @param user 查询的条件:有可能有用户名,有可能有性别,也有可能有地址,还有可能是都有
* @return
*/
List<User> queryUserByCondition(User user); /**
* 根据QueryCondition中提供的ids集合,查询用户信息
* @param queryCondition 查询条件
* @return
*/
List<User> queryUserByIds(QueryCondition queryCondition);
}
5.IUserDao.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="dao.IUserDao"> <!-- 查询所有 -->
<select id="findAll" resultType="domain.User">
select * from user
</select> <!-- 保存操作 -->
<select id="saveUser" resultType="domain.User">
insert into user(username,address,sex,birthday)values(#{username},#{address},#{sex},#{birthday})
</select> <!-- 更新操作 -->
<select id="updateUser" resultType="domain.User">
update user set username= #{username},address= #{address},sex= #{sex},birthday= #{birthday} where id=#{id}
</select> <!-- 根据id查询用户 -->
<select id="queryById" parameterType="INT" resultType="domain.User">
select * from user where id = #{uid}
</select> <!-- 根据名称模糊查询 -->
<select id="queryByName" parameterType="string" resultType="domain.User">
select * from user where username like #{name}
</select> <!-- 获取用户的总记录数 -->
<select id="queryTotalCount" resultType="INT">
select count(id) from user
</select> <!-- 根据queryVo的条件查询用户 -->
<select id="queryByQueryConditionObject" parameterType="domain.QueryCondition" resultType="domain.User">
select *from user where username like #{user.username} and sex like #{user.sex}
</select> <!--id值要与IUserDao.java这个接口的方法名一致-->
<select id="queryUserByCondition" resultType="domain.User" parameterType="domain.User">
select * from user
<where>
<if test="username != null">
and username = #{username}
</if>
<if test="sex != null">
and sex = #{sex}
</if>
</where>
</select> <!--根据QueryCondition中提供的ids集合,查询用户信息 -->
<select id="queryUserByIds" resultType="domain.User" parameterType="domain.QueryCondition">
select * from user
<where>
<if test="ids != null and ids.size()>0">
<foreach collection="ids" open="and id in (" close=")" item="uid" separator=",">
#{uid}
</foreach>
</if>
</where>
</select>
</mapper>
6.Mybatis的配置文件SqlMapConfig.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<!-- mybatis的主配置文件 -->
<configuration>
<!-- 配置环境 -->
<environments default="mysql">
<!-- 配置mysql的环境-->
<environment id="mysql">
<!-- 配置事务的类型-->
<transactionManager type="JDBC"></transactionManager>
<!-- 配置数据源(连接池) -->
<dataSource type="POOLED">
<!-- 配置连接数据库的4个基本信息(以下内容需要根据实际情况进行修改) -->
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>
<property name="username" value="root"/>
<property name="password" value="plj824"/>
</dataSource>
</environment>
</environments> <!-- 指定映射配置文件的位置,映射配置文件指的是每个dao独立的配置文件 -->
<mappers>
<!--方法1:xml配置-->
<mapper resource="dao/IUserDao.xml"/> </mappers>
</configuration>
7.综合测试类
package test; import dao.IUserDao;
import domain.QueryCondition;
import domain.User;
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.Test; import java.io.InputStream;
import java.util.ArrayList;
import java.util.Date;
import java.util.List; public class MybatisTest01 { private InputStream in;
private SqlSession sqlSession;
private IUserDao userDao; /**
* 初始化MyBatis
* @throws Exception
*/
public void initMyBatis() throws Exception{
//1.读取配置文件
in = Resources.getResourceAsStream("SqlMapConfig.xml");
//2.创建SqlSessionFactory
SqlSessionFactoryBuilder builder=new SqlSessionFactoryBuilder(); //创建SqlSessionFactory的构建者builder
SqlSessionFactory factory=builder.build(in); //利用构建者builder创建SqlSessionFactory
//3.使用工厂生产SqlSession对象
sqlSession = factory.openSession();
//4.使用SqlSessions对象创建Dao接口的代理对象
userDao = sqlSession.getMapper(IUserDao.class);
} /**
* 释放资源
* @throws Exception
*/
public void destroy() throws Exception{
sqlSession.commit();//提交事务
sqlSession.close();
in.close();
} /**
* 查询所有
*/
@Test
public void testQueryAll() throws Exception{ initMyBatis();
//5.使用代理对象执行方法
List<User> users = userDao.findAll();
for (User user : users) {
System.out.println(user);
}
destroy();
} /**
* 测试保存操作
* @throws Exception
*/
@Test
public void testSave() throws Exception{
User user=new User();
user.setUsername("lucky");
user.setAddress("天台白鹤");
user.setBirthday(new Date());
user.setSex("男"); initMyBatis();
//5.使用代理对象执行方法
userDao.saveUser(user); destroy();
} /**
* 测试更新操作
* @throws Exception
*/
@Test
public void testUpdate() throws Exception{
User user=new User();
user.setId(49);
user.setUsername("lucky");
user.setAddress("浙江天台井塘村");
user.setBirthday(new Date());
user.setSex("男"); initMyBatis();
//5.使用代理对象执行方法
userDao.updateUser(user); destroy();
} /**
* 测试更新操作
* @throws Exception
*/
@Test
public void testDelete() throws Exception{ initMyBatis();
//5.使用代理对象执行方法
userDao.deleteUser(48);
destroy();
} /**
* 测试查询一个的方法
* @throws Exception
*/
@Test
public void testQueryOne()throws Exception{
initMyBatis();
//5.使用代理对象执行方法
User user=userDao.queryById(49);
System.out.println(user);
destroy();
} /**
* 模糊查询
* @throws Exception
*/
@Test
public void testQueryByName()throws Exception{
initMyBatis();
//5.使用代理对象执行方法
List<User> users = userDao.queryByName("%ck%");
for (User user : users) {
System.out.println(user);
}
destroy();
} /**
* 查询总记录数
* @throws Exception
*/
@Test
public void testQueryTotalCount()throws Exception{
initMyBatis();
//5.使用代理对象执行方法
int totalCount = userDao.queryTotalCount();
System.out.println(totalCount);
destroy();
} /**
* 根据查询条件实体类对象进行查询
* @throws Exception
*/
@Test
public void testQueryConditionObject()throws Exception{
initMyBatis();
QueryCondition queryConditon=new QueryCondition(); //创建查询条件实体类
User user=new User();
user.setUsername("%王%"); //查询条件1:名字包含王
user.setSex("女"); //性别为女
queryConditon.setUser(user); //将查询条件封装到查询条件实体类QueryConditon中
//5.使用代理对象执行方法
List<User> users = userDao.queryByQueryConditionObject(queryConditon);
for (User user1 : users) {
System.out.println(user1);
}
destroy();
} /**
* 查询总记录数
* @throws Exception
*/
@Test
public void testQueryUserByCondition()throws Exception{
User user=new User();
user.setUsername("老王");
initMyBatis();
//5.使用代理对象执行方法
List<User> users = userDao.queryUserByCondition(user);
for (User user1 : users) {
System.out.println(user1);
}
destroy();
} /**
* 根据查询条件实体类对象进行查询
* @throws Exception
*/
@Test
public void testQueryUserByIds()throws Exception{
initMyBatis();
QueryCondition queryConditon=new QueryCondition(); //创建查询条件实体类
List<Integer> ids=new ArrayList<Integer>();
ids.add(41);
ids.add(42);
ids.add(49);
ids.add(50);
queryConditon.setIds(ids);
//5.使用代理对象执行方法
List<User> users = userDao.queryUserByIds(queryConditon);
for (User user1 : users) {
System.out.println(user1);
}
destroy();
} }
06 Mybatis 使用xml配置映射模式+动态SQL---使用案例的更多相关文章
- 小峰mybatis(5)mybatis使用注解配置sql映射器--动态sql
		一.使用注解配置映射器 动态sql: 用的并不是很多,了解下: Student.java 实体bean: package com.cy.model; public class Student{ pri ... 
- mybatis的注解开发之三种动态sql
		脚本sql XML配置方式的动态SQL我就不讲了,有兴趣可以自己了解,下面是用<script>的方式把它照搬过来,用注解来实现.适用于xml配置转换到注解配置 @Select(" ... 
- MyBatis框架之SQL映射和动态SQL
		使用MyBatis实现条件查询 1.SQL映射文件: MyBatis真正的强大之处就在于SQL映射语句,MyBatis专注于SQL,对于开发人员来说也是极大限度的进行SQL调优,以保证性能.下面是SQ ... 
- SpringBoot系列-整合Mybatis(XML配置方式)
		目录 一.什么是 MyBatis? 二.整合方式 三.实战 四.测试 本文介绍下SpringBoot整合Mybatis(XML配置方式)的过程. 一.什么是 MyBatis? MyBatis 是一款优 ... 
- generator自动生成mybatis的xml配置
		generator自动生成mybatis的xml配置.model.map等信息:1.下载mybatis-generator-core-1.3.2.jar包. 网址:http://code. ... 
- SpringBoot 整合 Mybatis + Mysql——XML配置方式
		一.介绍 SpringBoot有两种方法与数据库建立连接,一种是集成Mybatis,另一种用JdbcTemplate,本文主要讨论集成Mybatis方式. SpringBoot整合Mybatis也有两 ... 
- MyBatis基础入门《十七》动态SQL
		MyBatis基础入门<十七>动态SQL 描述: >> 完成多条件查询等逻辑实现 >> 用于实现动态SQL的元素主要有: > if > trim > ... 
- (转)MyBatis框架的学习(四)——Mapper.xml文件中的输入和输出映射以及动态sql
		http://blog.csdn.net/yerenyuan_pku/article/details/71893689 前面对MyBatis框架的学习中,我们对Mapper.xml映射文件多少有些了解 ... 
- MyBatis Spring整合配置映射接口类与映射xml文件
		本文转自http://blog.csdn.net/zht666/article/details/38706083 Spring整合MyBatis使用到了mybatis-spring,在配置mybati ... 
随机推荐
- 【游记】CSP2019 垫底记
			考试时候的我: Day 1 做完 \(T1\) 和 \(T2\),还有 \(2.5 h\),我想阿克 \(Day1\).(\(T3\):不,你不想) 不过一会就想出来给每个点 dfs 贪心选一个点,然 ... 
- APICloud的tapmode用法
			在开发的过程中,直接给元素绑定事件属性onclick会点击没反应,这时,给标签加上tapmode,就解决了问题,查了一下,原来tapmode具有加速点击事件功能,在触发事件中加入tapmode可以消除 ... 
- AD域服务器组策略实现文件夹重定向 保护文件安全
			网络管理员或许都遇到过类似的烦恼.如系统崩溃后,原来存放在 C盘的应用程序专署数据都丢失了;或者桌面上的文件莫名其妙少了,等等.有时候,我们也千方百计提醒员工不要把文件存放在桌面上,但是他们总是不听 ... 
- 转载:四两拨千斤:借助Spark GraphX将QQ千亿关系链计算提速20倍
			四两拨千斤:借助Spark GraphX将QQ千亿关系链计算提速20倍 时间 2016-07-22 16:57:00 炼数成金 相似文章 (5) 原文 http://www.dataguru.cn/ ... 
- Java连接excel实现:通过姓名查找id和通过id查找姓名
			注意每个方法结束都要关闭workbook: 还有getIdbyname()方法中字符串flag与name的比较,一定要用equals()方法!!!: 剩下的不多解释,注释都在代码中: import j ... 
- MySQL的ROUND函数
			ROUND(X) ROUND(X,D) 返回参数X, 其值接近于最近似的整数.在有两个参数的情况下,返回 X ,其值保留到小数点后D位,而第D位的保留方式为四舍五入.若要接保留X值小数点左边的D 位, ... 
- 解决用官方容器启动redmine无法插入中文字符的问题
			jiangzhaowei@kitking:/kitking/redmineIot$ sudo docker-compose up -d Creating network "redmineio ... 
- 解决vs2010按ctrl+f5,调试窗口一闪而过的方法
			vs2010调试按F5与按Ctrl+F5有什么区别 Ctrl F5测试运行后不自动推出控制台,直接按F5会自动退出去 解决vs2010按ctrl+f5,调试窗口一闪而过的方法 http://hi.ba ... 
- CMU Database Systems - MVCC
			MVCC是一种用空间来换取更高的并发度的技术 对同一个对象不去update,而且记录下每一次的不同版本的值 存在不会消失,新值并不能抹杀原先的存在 所以update操作并不是对世界的真实反映,这是一种 ... 
- 010 @ControllerAdvice
			一:说明 1.说明 这个注解是用于写一个异常捕获的处理类. 这里介绍全局捕获异常,自定义异常捕获 2.ps 在这里,顺便写一下基础的自定义异常类,以后方便用于业务异常继承 二:全局异常捕获 1.处理类 ... 
