步骤:
Jar包导入,生成数据库表,创建与src同级资源目录config,test目录(注意,config,test均为资源目录)
1.创建实体类:
User.java
package com.xiangshuai.mybatis.pojo;
import java.util.Date;
public classUser {
private int id;
private Integer sex;
private Date birthday;
private String address;
private String username;
public User(Integer sex, Date birthday, String address, 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() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public Integer getSex() {
return sex;
}
public void setSex(Integer 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 + ", sex="+ sex+ ", birthday=" + birthday + ", address=" + address+ ", username="
+username + "]";
}
}
VO.java
package com.xiangshuai.mybatis.pojo;
import java.util.List;
/*
* * 入参类型包装类
* 有 user和 user id这集合两个属性
* */
public classVO {
privateUser user;
privateList<Integer> idList;
public List<Integer>getIdList() {
return idList;
}
public voidsetIdList(List<Integer> idList) {
this.idList = idList;
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
}
2.建实体类对应的映射文件UserMapper.xml(局部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">
<!-- namespace:命名空间,对statement的信息进行分类管理 -->
<!-- 注意:在mapper代理时,它具有特殊及重要的作用,在这里 namespace="com.xiangshuai.mybatis.mapper.UserMapper"
对应mapper接口UserMapper的全类名-->
<mapper namespace="com.xiangshuai.mybatis.mapper.UserMapper">
<!-- resultMap helloworld级别-->
<!-- 将 select 查出来的结果集映射到 resultMap标签对应的 type类型中
其实resultType也是先resultMap将映射到resultType类型中但并不需要我们自己
操作-->
<!-- id标签:专门为查询结果中唯一列映射 -->
<!-- result标签:映射查询结果中的普通列 -->
<resultMap type="com.xiangshuai.mybatis.pojo.User" id="UserRstMap">
<id column="id"property="id" />
<result column="username" property="username"/>
<result column="sex" property="sex"/>
</resultMap>
<select id="findUserRstMap" parameterType="int" resultMap="UserRstMap">
selectid,username,birthday,sex,address fromuser where id = #{id}
</select>
<!-- 动态 sql及sql片断 -->
<!-- 定义sql片段 -->
<!-- sql片段内,可以定义sql语句中任何部分 -->
<!-- sql片段内,最好不用将where和select关键字声明在内 -->
<sql id="whereClause">
<!-- if标签:可以对输入的参数进行判断 -->
<!-- test:指定判断表达式 -->
<if test="user !=null">
<if test="user.username!= null and user.username != ''">
ANDusername LIKE '%${user.username}%'
</if>
<if test="user.sex !=null and user.sex != ''">
ANDsex = #{user.sex}
</if>
</if>
<if test="idList !=null">
<!-- AND id IN (#{id},#{id},#{id}) -->
<!-- collection:表示pojo中集合属性的属性名称 -->
<!-- item:为遍历出的结果声明一个变量名称 -->
<!-- open:遍历开始时,需要拼接的字符串 -->
<!-- close:遍历结束时,需要拼接的字符串 -->
<!-- separator:遍历中间需要拼接的连接符 -->
ANDid IN
<foreach collection="idList" item="id"open="(" close=")"
separator=",">
#{id}
</foreach>
</if>
</sql>
<!-- 综合查询,查询用户列表 -->
<select id="findUserList" parameterType="com.xiangshuai.mybatis.pojo.VO"
resultType="com.xiangshuai.mybatis.pojo.User">
SELECT* FROM user
<!-- where标签:默认去掉后面第一个AND,如果没有参数,则把自己干掉 -->
<where>
<!-- 引入sql片段 -->
<include refid="whereClause" />
</where>
</select>
<!-- 综合查询用户总数 -->
<select id="findUserCount" parameterType="com.xiangshuai.mybatis.pojo.VO"
resultType="int">
SELECTcount(*) FROM user
<!-- where标签:默认去掉后面第一个AND,如果没有参数,则把自己干掉 -->
<where>
<!-- 引入sql片段 -->
<include refid="whereClause" />
</where>
</select>
</mapper>
3.将UserMapper.xml(局部xml文件)mapper到 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">
<configuration>
<!-- 加载java的配置文件或者声明属性信息 -->
<properties resource="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来管理 -->
<environments default="development">
<environment id="development">
<!-- 配置JDBC事务控制,由mybatis进行管理 -->
<transactionManager type="JDBC"></transactionManager>
<!-- 配置数据源,采用mybatis连接池 -->
<dataSource type="POOLED">
<property name="driver" value="${db.driver}"/>
<property name="url" value="${db.url}"/>
<property name="username" value="${db.username}"/>
<property name="password" value="${db.password}"/>
</dataSource>
</environment>
</environments>
<!-- 加载映射文件 -->
<mappers>
<mapper resource="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);
}
}