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 ...
随机推荐
- crc计算工具推荐
比较好的crc计算工具,32位64位系统都可以用的.crc的校验方法也很多.推荐使用 下载地址
- BZOJ1113 海报PLA1(单调栈入门题)
一,自己思考下 1,先自己思考下 N个矩形,排成一排,现在希望用尽量少的海报去cover住它们. 2,不懂. 着实不懂. 3,分析下,最优性问题对吧,然后就每什么想法了.. 虽然肯定和单调栈和单调队列 ...
- lombok常用注解@Data@AllArgsConstructor@NoArgsConstructor@Builder@Accessors
原贴:https://blog.csdn.net/ChenXvYuan_001/article/details/84961992 https://blog.csdn.net/weixin_382293 ...
- pgloader 学习(六) 加载csv 数据
关于加载的配置参数都是使用comand file command file 参考格式 LOAD CSV FROM 'GeoLiteCity-Blocks.csv' WITH ENCODING iso- ...
- Lightning Web Components 来自salesforce 的web 组件化解决方案
Lightning Web Components 是一个轻量,快速,企业级别的web 组件化解决方案,官方网站也提供了很全的文档 对于我们学习使用还是很方便的,同时我们也可以方便的学习了解salesf ...
- JDK 下载相关资料
所有版本JDK下载地址: http://www.oracle.com/technetwork/java/archive-139210.html 下载账户密码: 2696671285@qq.com Or ...
- Hyperspectral Image Classification Using Similarity Measurements-Based Deep Recurrent Neural Networks
用RNN来做像素分类,输入是一系列相近的像素,长度人为指定为l,相近是利用像素相似度或是范围相似度得到的,计算个欧氏距离或是SAM. 数据是两个高光谱数据 1.Pavia University,Ref ...
- 【python】学习笔记之遇到的坑print输出报错
在Python3.x中,使用print时出错(SyntaxError: Missing parentheses in call to 'print')解决办法 Python2到Python3,很多基本 ...
- ICEM-四分之一带孔圆板
原视频下载地址:http://yunpan.cn/cLHCeDyzqT2Uh 访问密码 52cf
- ASP.NET MVC5+EF6+EasyUI 后台管理系统-代码生成器用法
新的代码生成器比老的更加容易使用,要生成什么形式就选择什么形式,新的代码生成器采用的是WCF界面开发,同样采用开源的模式,根据自己使用习惯容易扩展 1.单列表模式 2.树形列表模式 3.左右列表模式 ...