第五简单mybatis resulstMap-helloworld及动态sql
来源:互联网 发布:北京学历提升 知乎 编辑:程序博客网 时间:2024/06/05 05:48
步骤:
Jar包导入,生成数据库表,创建与src同级资源目录config,test目录(注意,config,test均为资源目录)
1.创建实体类:
User.java
package com.xiangshuai.mybatis.pojo;
import java.util.Date;
public classUser {
private int id;
private Integersex;
private Datebirthday;
private Stringaddress;
private Stringusername;
public User(Integersex, Date birthday, Stringaddress, String username) {
super();
this.sex =sex;
this.birthday =birthday;
this.address =address;
this.username =username;
}
public User() {
super();
// TODO Auto-generated constructor stub
}
public String getUsername() {
returnusername;
}
public void setUsername(String username) {
this.username =username;
}
public int getId() {
returnid;
}
public void setId(intid) {
this.id =id;
}
public Integer getSex() {
returnsex;
}
public void setSex(Integer sex) {
this.sex =sex;
}
public Date getBirthday() {
returnbirthday;
}
public void setBirthday(Date birthday) {
this.birthday =birthday;
}
public String getAddress() {
returnaddress;
}
public void setAddress(String address) {
this.address =address;
}
@Override
public String toString() {
return"User [id="+ id +", sex="+ sex+", birthday=" + birthday + ", address=" + address+ ", username="
+username + "]";
}
}
VO.java
package com.xiangshuai.mybatis.pojo;
import java.util.List;
/*
* * 入参类型包装类
* 有 user和 user id这集合两个属性
* */
public classVO {
privateUseruser;
privateList<Integer>idList;
public List<Integer>getIdList() {
returnidList;
}
public voidsetIdList(List<Integer> idList) {
this.idList =idList;
}
public User getUser() {
returnuser;
}
public void setUser(User user) {
this.user =user;
}
}
2.建实体类对应的映射文件UserMapper.xml(局部xml文件)
<?xmlversion="1.0"encoding="UTF-8"?>
<!DOCTYPEmapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- namespace:命名空间,对statement的信息进行分类管理 -->
<!-- 注意:在mapper代理时,它具有特殊及重要的作用,在这里 namespace="com.xiangshuai.mybatis.mapper.UserMapper"
对应mapper接口UserMapper的全类名-->
<mappernamespace="com.xiangshuai.mybatis.mapper.UserMapper">
<!-- resultMap helloworld级别-->
<!-- 将 select查出来的结果集映射到 resultMap标签对应的 type类型中
其实resultType也是先resultMap将映射到resultType类型中但并不需要我们自己
操作-->
<!-- id标签:专门为查询结果中唯一列映射 -->
<!-- result标签:映射查询结果中的普通列 -->
<resultMaptype="com.xiangshuai.mybatis.pojo.User"id="UserRstMap">
<idcolumn="id"property="id"/>
<resultcolumn="username"property="username"/>
<resultcolumn="sex"property="sex"/>
</resultMap>
<selectid="findUserRstMap"parameterType="int"resultMap="UserRstMap">
selectid,username,birthday,sex,address fromuser where id = #{id}
</select>
<!-- 动态 sql及sql片断 -->
<!-- 定义sql片段 -->
<!-- sql片段内,可以定义sql语句中任何部分 -->
<!-- sql片段内,最好不用将where和select关键字声明在内 -->
<sqlid="whereClause">
<!-- if标签:可以对输入的参数进行判断 -->
<!-- test:指定判断表达式 -->
<iftest="user !=null">
<iftest="user.username!= null and user.username != ''">
ANDusername LIKE '%${user.username}%'
</if>
<iftest="user.sex !=null and user.sex != ''">
ANDsex = #{user.sex}
</if>
</if>
<iftest="idList !=null">
<!-- AND id IN (#{id},#{id},#{id}) -->
<!-- collection:表示pojo中集合属性的属性名称 -->
<!-- item:为遍历出的结果声明一个变量名称 -->
<!-- open:遍历开始时,需要拼接的字符串 -->
<!-- close:遍历结束时,需要拼接的字符串 -->
<!-- separator:遍历中间需要拼接的连接符 -->
ANDid IN
<foreachcollection="idList"item="id"open="("close=")"
separator=",">
#{id}
</foreach>
</if>
</sql>
<!-- 综合查询,查询用户列表 -->
<selectid="findUserList"parameterType="com.xiangshuai.mybatis.pojo.VO"
resultType="com.xiangshuai.mybatis.pojo.User">
SELECT* FROM user
<!-- where标签:默认去掉后面第一个AND,如果没有参数,则把自己干掉 -->
<where>
<!-- 引入sql片段 -->
<includerefid="whereClause"/>
</where>
</select>
<!-- 综合查询用户总数 -->
<selectid="findUserCount"parameterType="com.xiangshuai.mybatis.pojo.VO"
resultType="int">
SELECTcount(*) FROM user
<!-- where标签:默认去掉后面第一个AND,如果没有参数,则把自己干掉 -->
<where>
<!-- 引入sql片段 -->
<includerefid="whereClause"/>
</where>
</select>
</mapper>
3.将UserMapper.xml(局部xml文件)mapper到 SqlMapConfig.xml(全局配置文件)中
<?xmlversion="1.0"encoding="UTF-8"?>
<!DOCTYPEconfiguration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!-- 加载java的配置文件或者声明属性信息 -->
<propertiesresource="db.properties">
</properties>
<!-- <settings></settings> -->
<!-- 自定义别名 -->
<!-- <typeAliases>
单个别名定义
<typeAliastype="com.itheima.mybatis.po.User" alias="user"/>
批量别名定义(推荐)
package:指定包名称来为该包下的po类声明别名,默认的别名就是类名(首字母大小写都可)
<packagename="com.itheima.mybatis.po" />
</typeAliases>
-->
<!-- 配置mybatis的环境信息,与spring整合,该信息由spring来管理 -->
<environmentsdefault="development">
<environmentid="development">
<!-- 配置JDBC事务控制,由mybatis进行管理 -->
<transactionManagertype="JDBC"></transactionManager>
<!-- 配置数据源,采用mybatis连接池 -->
<dataSourcetype="POOLED">
<propertyname="driver"value="${db.driver}"/>
<propertyname="url"value="${db.url}"/>
<propertyname="username"value="${db.username}"/>
<propertyname="password"value="${db.password}"/>
</dataSource>
</environment>
</environments>
<!-- 加载映射文件 -->
<mappers>
<mapperresource="UserMapper.xml"/>
<!-- 批量加载映射文件 -->
<!-- <packagename="com.itheima.mybatis.mapper" /> -->
</mappers>
</configuration>
4.严格参照UserMapper.xml 按照mapper规范创建mapper接口UserMapper.java
package com.xiangshuai.mybatis.mapper;
import java.util.List;
importcom.xiangshuai.mybatis.pojo.User;
importcom.xiangshuai.mybatis.pojo.VO;
public interface UserMapper {
public User findUserRstMap(int id);
public List<User> findUserList(VO vo);
public int findUserCount(VO vo);
}
5.测试类Demo1.java
package com.xiangshuai.test;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
importorg.apache.ibatis.binding.MapperRegistry;
import org.apache.ibatis.io.Resources;
importorg.apache.ibatis.session.SqlSession;
importorg.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Before;
import org.junit.Test;
importcom.xiangshuai.mybatis.mapper.UserMapper;
import com.xiangshuai.mybatis.pojo.User;
import com.xiangshuai.mybatis.pojo.VO;
public class Demo1 {
/*mybatis开发方式mapper开发非mapper开始: 查询,操作和hibernate很像,也是先造实体类,然后配实体类的XML映射文件,然后将实体类的XML映射文件mapper到全局映射 XML文件
SqlMapConfig.xml中去,
* */
privateSqlSessionFactory sqlSessionFactory;
@Before
publicvoid before(){
//读取配置文件
//全局配置文件的路径
Stringresource = "SqlMapConfig.xml";
InputStreaminputStream = null;
try{
inputStream= Resources.getResourceAsStream(resource);
}catch (IOException e) {
//TODO Auto-generated catch block
e.printStackTrace();
}
//创建SqlSessionFactory
sqlSessionFactory = newSqlSessionFactoryBuilder().build(inputStream);
}
//resultMap标签测试
@Test
public void findUserByUsername(){
//创建mapper对象 -- UserMapper对象
//创建mapper对象 -- UserMapper对象
SqlSessionsqlsession = sqlSessionFactory.openSession();
UserMappermapper = sqlsession.getMapper(UserMapper.class);
//调用mapper完成 增删改查方法
Useruser = mapper.findUserRstMap(1);
System.out.println(user);
}
//动态sql测试1,根据VO包装类对象动态SQL查询user
@Test
publicvoid findUserList(){
//创建mapper对象 -- UserMapper对象
//创建mapper对象 -- UserMapper对象
SqlSessionsqlsession = sqlSessionFactory.openSession();
UserMappermapper = sqlsession.getMapper(UserMapper.class);
//调用mapper完成 增删改查方法 ----在这里如果username='三'那么就只拼装username='三'的sql,其它字段不拼接,详见UserMapper.xml
Useruser = new User();user.setUsername("三");;VO vo = newVO();vo.setUser(user);
List<User>users = mapper.findUserList(vo);
System.out.println(users);
}
//动态sql测试1,根据 id 查 总人数,如果id 在 idList中就查出来
@Test
publicvoid findUserCount(){
//创建mapper对象 -- UserMapper对象
//创建mapper对象 -- UserMapper对象
SqlSessionsqlsession = sqlSessionFactory.openSession();
UserMappermapper = sqlsession.getMapper(UserMapper.class);
//调用mapper完成 增删改查方法 ----在这里如果username='三'那么就只拼装username='三'的sql,其它字段不拼接,详见UserMapper.xml
List<Integer>idList=Arrays.asList(1,10,5);VO vo = new VO();vo.setIdList(idList);
intcount = mapper.findUserCount(vo);
System.out.println(count);
}
}
- 第五简单mybatis resulstMap-helloworld及动态sql
- 学习流水账:MyBatis -- helloworld,动态SQL
- mybatis使用及动态sql
- MyBatis执行动态sql及存储过程
- Mybatis输入输出映射及动态sql
- Mybatis配置及动态SQL语句标签
- MyBatis动态sql中foreach的简单使用
- 【Spring+SpringMVC+MyBatis深入学习及搭建】05.动态sql
- Mybatis学习(十二)mybatis理解动态sql及sql片段
- mybatis动态SQL语句
- MyBatis动态SQL
- MyBatis 动态SQL
- Mybatis 动态SQL
- MyBatis动态SQL
- MyBatis动态SQL完整版
- mybatis动态sql
- mybatis动态SQL语句
- mybatis动态SQL语句
- linux 安装ss
- jQuery中$.fn的用法示例介绍
- 腾讯云CentOS服务器上配置nginx+python3
- POJ 1338 Ugly Number 优先队列
- Redis和Memcache的区别总结
- 第五简单mybatis resulstMap-helloworld及动态sql
- 数据过滤
- 9种高性能可用高并发的技术架构
- 基于LeanCloud平台的REST API封装
- node.js 使用-事件处理(EventEmitter)
- spring boot默认日志配置,以及改用log4j日志配置
- 野指针(悬挂指针)
- IE浏览器下ajax缓存导致数据不更新的解决方法
- 如果Android 8.0的代码重新改写,那么Fuchsia OS的意义何在?