CURD

命名空间namespace

namespace的包名要和Dao/mapper接口的包名一致!

查询语句Select

选择,查询语句

  • id:就是对应发namespace中的方法名
  • resultType:Sql语句执行的返回值

  • parameterType:参数类型

1
2
3
<select id="getUserById" resultType="top.huii.pojo.User" parameterType="int">
select * from javaweb.user where id = #{id}
</select>

结果:User{id=1, name='张三', pwd='11111111'}

新增Insert

1
2
3
<insert id="addUser" parameterType="top.huii.pojo.User">
insert into javaweb.user (id, name, pwd) values (#{id}, #{name}, #{pwd});
</insert>

修改Update

1
2
3
<update id="updateUser" parameterType="top.huii.pojo.User">
update javaweb.user set name=#{name}, pwd=#{pwd} where id = #{id};
</update>

删除Delete

1
2
3
<delete id="deleteUser" parameterType="int">
delete from javaweb.user where id=#{id};
</delete>

代码展示

  • 工具类MybatisUtils
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
package top.huii.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;

//sqlSessionFactory
public class MybatisUtils {
private static SqlSessionFactory sqlSessionFactory;
static {
try {
// 获取sqlSessionFactory
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
} catch (IOException e) {
e.printStackTrace();
}
}

public static SqlSession getSqlSession(){
SqlSession sqlSession = sqlSessionFactory.openSession();
return sqlSession;
}
}

  • 定义接口UserDao.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
package top.huii.dao;

import top.huii.pojo.User;

import java.util.List;

public interface UserDao {
// 获取全部用户
List<User> getUserList();

// 根据id查询用户
User getUserById(int id);

// 插入一个用户
int addUser(User user);

// 修改用户
int updateUser(User User);

// 删除用户
int deleteUser(int id);
}

  • sql语句UserMapper.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?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="top.huii.dao.UserDao">
<select id="getUserList" resultType="top.huii.pojo.User">
select * from javaweb.user;
</select>
<select id="getUserById" resultType="top.huii.pojo.User" parameterType="int">
select * from javaweb.user where id = #{id};
</select>
<insert id="addUser" parameterType="top.huii.pojo.User">
insert into javaweb.user (id, name, pwd) values (#{id}, #{name}, #{pwd});
</insert>
<update id="updateUser" parameterType="top.huii.pojo.User">
update javaweb.user set name=#{name}, pwd=#{pwd} where id = #{id};
</update>
<delete id="deleteUser" parameterType="int">
delete from javaweb.user where id=#{id};
</delete>
</mapper>
  • 测试UserDaoTest.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
package top.huii.dao;

import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import top.huii.pojo.User;
import top.huii.utils.MybatisUtils;

import java.util.List;

public class UserDaoTest {
@Test
public void Test() {
// 获得sqlSession对象
SqlSession sqlSession = MybatisUtils.getSqlSession();
// 方式1:getMapper 推荐
UserDao mapper = sqlSession.getMapper(UserDao.class);
List<User> userList = mapper.getUserList();

// 方式2 不推荐
// List<User> userList = sqlSession.selectList("top.huii.dao.UserDao.getUserList");

for (User user :
userList) {
System.out.println(user);
}
sqlSession.close();

}

@Test
public void getUserById(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserDao mapper = sqlSession.getMapper(UserDao.class);

User user = mapper.getUserById(1);
System.out.println(user);

sqlSession.close();
}

@Test
public void addUser(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserDao mapper = sqlSession.getMapper(UserDao.class);

int i = mapper.addUser(new User(4, "你好试试", "11122333"));
if (i > 0){
System.out.println("成功");
}
// 提交事务
sqlSession.commit();
sqlSession.close();
}

@Test
public void updateUser(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserDao mapper = sqlSession.getMapper(UserDao.class);
mapper.updateUser(new User(4, "1111", "12000"));

sqlSession.commit();
sqlSession.close();
}

@Test
public void deleteUser(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserDao mapper = sqlSession.getMapper(UserDao.class);
mapper.deleteUser(1);

sqlSession.commit();
sqlSession.close();
}
}

万能Map

实体类中表太多,可以用map

配置解析

核心配置文件

MyBatis 的配置文件包含了会深深影响 MyBatis 行为的设置和属性信息。 配置文档的顶层结构如下:

  • configuration(配置)
    • properties(属性)
    • settings(设置)
    • typeAliases(类型别名)
    • typeHandlers(类型处理器)
    • objectFactory(对象工厂)
    • plugins(插件)
    • environments(环境配置)
      • environment(环境变量)
        • transactionManager(事务管理器)
        • dataSource(数据源)
    • databaseIdProvider(数据库厂商标识)
    • mappers(映射器)