思路流程:搭建环境—>导入Mybatis–>编写代码—>测试
1.1、搭建数据库
CREATE DATABASE `mybatis`;
USE `mybatis`;
CREATE TABLE `user` (
`id` int(20) NOT NULL AUTO_INCREMENT,
`username` varchar(50) NOT NULL,
`address` varchar(50) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
insert into `user`(`id`,`username`,`address`)
values (1,'詹姆斯','克里夫'),
(2,'科比','洛杉矶'),
(3,'保罗','洛杉矶'),
(4,'苏炳添','中国');
1.2、导入MyBatis相关依赖
<dependency>
<groupId>org.mybatisgroupId>
<artifactId>mybatisartifactId>
<version>3.5.5version>
dependency>
<dependency>
<groupId>mysqlgroupId>
<artifactId>mysql-connector-javaartifactId>
<version>8.0.21version>
dependency>
<dependency>
<groupId>junitgroupId>
<artifactId>junitartifactId>
<version>4.13version>
<scope>testscope>
dependency>
1.3、编写Mybatis核心配置文件
DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
dataSource>
environment>
environments>
<mappers>
<mapper resource="mapper/UserMapper.xml"/>
mappers>
configuration>
1.4、编写实体类
package com.lili.entity;
/**
* 对应数据库下的t_user表
*
* @author: QiJingJing
* @create: 2021/8/6
*/
public class User {
/**
* 用户编号
*/
private int id;
/**
* 姓名
*/
private String username;
/**
* 住址
*/
private String address;
public void setId(int id) {
this.id = id;
}
public User() {
}
public User(String username, String address) {
this.username = username;
this.address = address;
}
public int getId() {
return this.id;
}
public void setUsername(String username) {
this.username = username;
}
public String getUsername() {
return this.username;
}
public void setAddress(String address) {
this.address = address;
}
public String getAddress() {
return this.address;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", username='" + username + '\'' +
", address='" + address + '\'' +
'}';
}
}
1.5、编写Mybatis工具类(获取SqlSession对象)
package com.lili.utils;
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 java.io.IOException;
import java.io.InputStream;
/**
* 获取sqlSession对象
*
* @author: QiJingJing
* @create: 2021/8/6
*/
public class MybatisUtil {
private static SqlSessionFactory sqlSessionFactory;
static {
try {
// 获取sqlSessionFactory
InputStream in = Resources.getResourceAsStream("mybatis-config.xml");
sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 获取sqlSession对象
*/
public static SqlSession getSqlSession() {
return sqlSessionFactory.openSession();
}
}
1.6、编写Mapper接口类
public interface UserMapper {
/**
* 查询所有操作
*/
List<User> findAll();
}
1.7、编写Mapper.xml配置文件
DOCTYPE mapper
PUBLIC "-//mapper.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.lili.dao.UserMapper">
<select id="findAll" resultType="com.lili.entity.User">
select *
from user
select>
mapper>
1.8、编写测试类
public class MybatisTest {
@Test
public void userDaoTest() {
// 放到 try 里面sqlSession会自动关闭
try (SqlSession sqlSession = MybatisUtil.getSqlSession()) {
// 执行sql
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
List<User> userList = mapper.findAll();
userList.forEach(System.out::println);
} catch (Exception e) {
e.printStackTrace();
}
}
}
1.9、运行测试,结果如下
User{id=1, username='詹姆斯', address='克里夫'}
User{id=2, username='科比', address='洛杉矶'}
User{id=3, username='保罗', address='洛杉矶'}
User{id=4, username='苏炳添', address='中国'}
select语句的属性
id
parameterType
resultType:
需求1:根据id查询用户
1.在UserMapper中添加对应方法
public interface UserMapper {
/**
* 查询所有操作
*/
List<User> findAll();
/**
* 根据id查询用户
*/
User findById(@Param("id") int id);
}
2.在UserMapper.xml中添加对应select语句
<select id="findById" parameterType="integer" resultType="com.lili.entity.User">
select *
from user
where id = #{id}
select>
3.测试类中进行测试
@Test
public void test2() {
// 获取SqlSession
try (SqlSession sqlSession = MybatisUtil.getSqlSession()) {
// 得到UserMapper对象
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
// 执行查询
User user = mapper.findById(1);
// 打印
System.out.println(user);
} catch (Exception e) {
e.printStackTrace();
}
}
4.输出如下
User{id=1, username='詹姆斯', address='克里夫'}
需求2:根据用户名和住址查询用户
方法一:直接在方法中传递参数
在接口方法的参数前加 @Param属性
Sql语句编写的时候,直接取@Param中设置的值即可,不需要单独设置参数类型
User findByUA(@Param("username") String username,@Param("address") String address);
<select id="findByUA" resultType="com.lili.entity.User">
select *
from user
where username = #{username}
and address = #{address}
</select>
方法二:使用Map传参
1.在接口方法上,直接使用map参数
User findByMap(Map<String,Object> map);
2.UserMapper.xml
<select id="findByMap" parameterType="map" resultType="com.lili.entity.User">
select *
from user
where username = #{username}
and address = #{address}
select>
3.在使用方法的时候,Map的key为sql中取得值即可,没有顺序要求
Map<String,Object> map = new HashMap<>();
map.put("username","苏炳添");
map.put("address","中国");
// 执行查询
User user = mapper.findByMap(map);
需求:给数据库增加一个用户
1.在UserMapper中添加对应方法
int addUser(User user);
2.UserMapper.xml
<insert id="addUser" parameterType="com.lili.entity.User">
insert into user (`id`, `username`, `address`)
values (#{id}, #{username}, #{address})
insert>
3.测试代码
User user = new User();
user.setId(5);
user.setUsername("齐菁菁");
user.setAddress("河南");
// 执行添加
int i = mapper.addUser(user);
System.out.println(i);
// 注意:增删改操作必须提交
sqlSession.commit();
需求 :把id为5的地址改为中国
1.在UserMapper中添加对应方法
int update(@Param("address") String address,@Param("id") int id);
2.UserMapper.xml
<update id="update" >
update user
set address = #{address}
where id = #{id}
update>
3.测试代码
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
int i = mapper.update("中国", 5);
System.out.println(i);
// 注意:增删改操作必须提交
sqlSession.commit();
需求 :根据id删除一个用户
1.在UserMapper中添加对应方法
int deleteById(@Param("id") int id);
2.UserMapper.xml
<delete id="deleteById" >
delete from user where id = #{id}
delete>
3.测试代码
int i = mapper.deleteById(1);
System.out.println(i);
// 注意:增删改操作必须提交
sqlSession.commit();
小结:
所有的增删改操作都需要提交事务!
接口所有的普通参数,尽量都写上@Param参数,尤其是多个参数时,必须写上!
有时候根据业务的需求,可以考虑使用map传递参数!
为了规范操作,在SQL的配置文件中,我们尽量将Parameter参数和resultType都写上!