目录
前言
- 根据id查询用户信息
- 新增用户信息
- 根据id修改用户信息
- 根据id删除用户信息
- 采用动态SQL语句
一、创建数据库
- 连接数据库:在命令窗口输入mysql -u root -p回车然后输入密码回车
- 创建数据库:create database mybatis;
- 创建表和插入数据
use mybatis;
create table user(
uid int primary key auto_increment,
uname varchar(20) not null,
uage int not null
);
insert into user values(1,'张三',20),(2,'李四',25);
二、导入相关依赖
pom.xml代码如下:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.gk</groupId>
<artifactId>mybatisdemo</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.2</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.11</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>compile</scope>
</dependency>
</dependencies>
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
</resources>
</build>
</project>
三、创建POJO实体
在src/main/java目录下创建一个com.itheima.pojo包,在包下创建一个User.java实体类,代码如下:
package com.itheima.pojo;
public class User {
private Integer uid;
private String uname;
private Integer uage;
public Integer getUid() {
return uid;
}
public void setUid(Integer uid) {
this.uid = uid;
}
public String getUname() {
return uname;
}
public void setUname(String uname) {
this.uname = uname;
}
public Integer getUage() {
return uage;
}
public void setUage(Integer uage) {
this.uage = uage;
}
@Override
public String toString() {
return "User{" +
"uid=" + uid +
", uname='" + uname + '\'' +
", uage=" + uage +
'}';
}
}
四、创建数据库连接信息配置文件
在项目的src/main/resources目录下创建数据库连接信息配置文件,其命名为:db.properties代码如下:
mysql.driver=com.mysql.cj.jdbc.Driver
mysql.url=jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC&\
characterEncoding=utf-8&useUnicode=true&useSSL=false
mysql.username=root
mysql.password=123456
五、创建映射文件UserMapper.xml
在项目的src/main/resources目录下创建一个mapper文件夹,在该文件夹下创建一个UserMapper.xml,该文件主要用于配置SQL语句和Java对象之间的映射,使SQL语句查询出来的数据能够被封装成Java对象。
代码如下:
<?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">
<!--根据id查询用户信息,resultType和resultMap不能同时使用,resultMap表示结果映射,resultType表示查询后返回的值-->
<!--其中parameterType表示传进的值,是可选属性,因为MyBatis可以通过TypeHander推断出具体传入语句的参数-->
<mapper namespace="com.itheima.mapper.UserMapper">
<!--动态SQL进行where、if判断根据uid、uname、uage条件查询员工信息 -->
<select id="findById1" parameterType="com.itheima.pojo.User"
resultType="com.itheima.pojo.User">
select * from user
<where>
<if test="uid != null and uid !=''">
and uid = #{uid}
</if>
<if test="uname != null and uname !=''">
and uname=#{uname}
</if>
<if test="uage != null and uage!=''">
and uage=#{uage}
</if>
</where>
</select>
<!--动态SQL进行trim、chose、when、otherwise根据uid、uname、uage条件查询员工信息 -->
<select id="findById2" parameterType="com.itheima.pojo.User"
resultType="com.itheima.pojo.User">
select * from user
<trim prefix="where" prefixOverrides="and">
<choose>
<when test="uid != null and uid !=''">
and uid = #{uid}
</when>
<when test="uname != null and uname !=''">
and uname=#{uname}
</when>
<when test="uage != null and uage!=''">
and uage=#{uage}
</when>
<otherwise>
</otherwise>
</choose>
</trim>
</select>
<!--foreach元素,其中item表示集合中的迭代时的别名,index是元素的序号,在Map中index是元素的key,collection用于指定遍历参数的类型有List、
数组、Map类型,该属性必须指定,open表示foreach语句代码的开始符号close结束符号,以open="("开始,close=")"结束,其中separator表示元素分隔
符-->
<!--collection用于指定遍历参数的类型为array-->
<select id="findById3" parameterType="java.util.Arrays"
resultType="com.itheima.pojo.User">
select * from user where uid in
<foreach item="uid" index="index" collection="array" open="(" separator="," close=")">
#{uid}
</foreach>
</select>
<!--collection用于指定遍历参数的类型为list-->
<select id="findById4" parameterType="java.util.Arrays"
resultType="com.itheima.pojo.User">
select * from user where uid in
<foreach item="uid" index="index" collection="list" open="(" separator="," close=")">
#{uid}
</foreach>
</select>
<!--collection用于指定遍历参数的类型为Map-->
<select id="findById5" parameterType="java.util.Map"
resultType="com.itheima.pojo.User">
select * from user where uid in
<foreach item="uid" index="index" collection="uid" open="(" separator="," close=")">
#{uid}
</foreach>
</select>
<!-- 新增用户信息 -->
<insert id="addUser" parameterType="com.itheima.pojo.User">
insert into user(uid,uname,uage)values
(#{uid},#{uname},#{uage})
</insert>
<!--SQL动态的进行set修改用户信息-->
<update id="updateUser" parameterType="com.itheima.pojo.User">
update user
<set>
<if test="uname != null and uname !=''">
uname= #{uname},
</if>
<if test=" uage !=null and uage !=''">
uage = #{uage},
</if>
</set>
where uid = #{uid}
</update>
<!-- 删除用户信息 -->
<delete id="deleteUser" parameterType="Integer">
delete from user where uid=#{uid}
</delete>
</mapper>
六、创建MyBatis的核心配置文件
在项目的src/main/resources目录下创建Mybatis的核心配置文件,其命名为:mybatis-config.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>
<!--引入数据库连接信息-->
<properties resource="db.properties" />
<!--配置运行环境,可以选择事务管理器和数据源,environments有两个子元素:分别为事务管理transactionManager元素和数据源dataSource元素-->
<!--事务管理transactionManager元素有两种类型,分别为JDBC和MANAGED,JDBC配置直接提交和回滚设置-->
<!--数据源dataSource元素配置不提交或回滚一个连接,而是让容器管理事务的整个生命周期,有无连接池UNPOOLED、连接池POOLED和JNDI-->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<!-- 数据库驱动-->
<property name="driver" value="${mysql.driver}"/>
<!--连接数据库的url-->
<property name="url" value="${mysql.url}"/>
<!-- 连接数据库的用户名-->
<property name="username" value="${mysql.username}"/>
<!-- 连接数据库的密码-->
<property name="password" value="${mysql.password}"/>
</dataSource>
</environment>
</environments>
<!--mapper的映射文件有4种,分别为类路径引入、本地路径引入、接口类引入、包名引入-->
<mappers>
<mapper resource="mapper/UserMapper.xml"/>
</mappers>
</configuration>
七、创建MyBatis的工具类
在src/main/java目录下创建一个com.itheima.utils包,在包下创建一个MyBatisUtils.java工具类,代码如下:
package com.itheima.utils;
import java.io.Reader;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
/**
* 工具类
*/
public class MyBatisUtils {
private static SqlSessionFactory sqlSessionFactory = null;
// 初始化SqlSessionFactory对象
static {
try {
// 使用MyBatis提供的Resources类加载MyBatis的配置文件
Reader reader =
Resources.getResourceAsReader("mybatis-config.xml");
// 构建SqlSessionFactory工厂
sqlSessionFactory =
new SqlSessionFactoryBuilder().build(reader);
} catch (Exception e) {
e.printStackTrace();
}
}
// 获取SqlSession对象的静态方法
public static SqlSession getSession() {
return sqlSessionFactory.openSession();
}
}
八、创建测试类
在src/main/java目录下创建一个com.itheima.test包,在包下创建一个MyBatisTest.java测试类,代码如下:
package com.itheima.test;
import com.itheima.pojo.User;
import com.itheima.utils.MyBatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class MyBatisTest {
//动态SQL进行if判断查询用户信息,如果条件判断为真,则将条件加入,where自动判断有组合条件拼装的SQL语句
//只有<where>元素内的某一个或多个条件成立时,才会在拼接SQL中加入关键字where,否则不会添加,即使有多余的and或or,<where>也会自动将其去除
@Test
public void findByIdTest1() {
// 通过工具类生成SqlSession对象
SqlSession session = MyBatisUtils.getSession();
User user=new User();
user.setUid(2);
user.setUname("李四");
List<User> users =
session.selectList("com.itheima.mapper.UserMapper.findById1", user);
System.out.println(users);
session.commit();
// 关闭SqlSession
session.close();
}
//动态SQL进行chose、when、otherwise判断查询用户信息,依据顺序查找,当第一个条件满足,就只用第一个条件,以此类推,trim的作用跟where的一样
@Test
public void findByIdTest2() {
// 通过工具类生成SqlSession对象
SqlSession session = MyBatisUtils.getSession();
User user=new User();
// user.setUid(2);
//user.setUname("张三");
List<User> users =
session.selectList("com.itheima.mapper.UserMapper.findById2", user);
System.out.println(users);
session.commit();
// 关闭SqlSession
session.close();
}
//动态SQL进行foreach元素遍历,能支持数组、List或Set接口的集合
//数组遍历
@Test
public void findByIdTest3() {
// 通过工具类生成SqlSession对象
SqlSession session = MyBatisUtils.getSession();
Integer [] users={1,2,3};
List<User> user =
session.selectList("com.itheima.mapper.UserMapper.findById3", users);
for(User useres:user) {
System.out.println(useres);
}
session.commit();
// 关闭SqlSession
session.close();
}
//List遍历
@Test
public void findByIdTest4() {
// 通过工具类生成SqlSession对象
SqlSession session = MyBatisUtils.getSession();
List<Integer> uid=new ArrayList<Integer>();
uid.add(1);
uid.add(2);
List<User> user =
session.selectList("com.itheima.mapper.UserMapper.findById4", uid);
for(User useres:user) {
System.out.println(useres);
}
session.commit();
// 关闭SqlSession
session.close();
}
//Map遍历
@Test
public void findByIdTest5() {
// 通过工具类生成SqlSession对象
SqlSession session = MyBatisUtils.getSession();
List<Integer> uid=new ArrayList<Integer>();
uid.add(1);
uid.add(2);
Map<String,Object> userMap=new HashMap<String,Object>();
userMap.put("uid",uid);
List<User> user =
session.selectList("com.itheima.mapper.UserMapper.findById5", userMap);
for(User useres:user) {
System.out.println(useres);
}
session.commit();
// 关闭SqlSession
session.close();
}
// 插入用户信息
@Test
public void insertUserTest() {
// 通过工具类生成SqlSession对象
SqlSession session = MyBatisUtils.getSession();
User user = new User();
user.setUid(3);
user.setUname("赵六");
user.setUage(55);
int result =
session.insert("com.itheima.mapper.UserMapper.addUser", user);
if (result > 0) {
System.out.println("成功插入" + result + "条数据");
} else {
System.out.println("插入数据失败");
}
System.out.println(user.toString());
session.commit();
// 关闭SqlSession
session.close();
}
//使用set和if动态修改用户信息,set元素会动态前置关键字set,同时也会消除SQL语句中最后一个多余的逗号
//注意set元素包含的内容不可为空,如果为空,则会出现SQL语法错误,因此要确保传入的更新字段不可为空
@Test
public void updateUserTest() {
// 通过工具类生成SqlSession对象
SqlSession session = MyBatisUtils.getSession();
User user = new User();
user.setUid(3);
user.setUname("赵七");
user.setUage(23);
int result =
session.update("com.itheima.mapper.UserMapper.updateUser", user);
if (result > 0) {
System.out.println("成功更新" + result + "条数据");
} else {
System.out.println("更新数据失败");
}
System.out.println(user.toString());
session.commit();
// 关闭SqlSession
session.close();
}
//根据id删除用户信息
@Test
public void deleteUserTest() {
// 通过工具类生成SqlSession对象
SqlSession session = MyBatisUtils.getSession();
int result =
session.delete("com.itheima.mapper.UserMapper.deleteUser", 3);
if (result > 0) {
System.out.println("成功删除" + result + "条数据");
} else {
System.out.println("删除数据失败");
}
session.commit();
// 关闭SqlSession
session.close();
}
}
九、运行结果