Mybatis-02-CRUD

Mybatis-CRUD

1、mybatis工具类

从工具类中获取 SqlSession 对象

public class MybatisUtil {
    private static SqlSessionFactory sqlSessionFactory = null;

    static {
        String resource = "mybatis-config.xml";
        InputStream inputStream = null;
        try {
            inputStream = Resources.getResourceAsStream(resource);
        } catch (IOException e) {
            e.printStackTrace();
        }
        sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
    }

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

2、给实体类设置别名

2.1、什么是别名

类型别名可为 Java 类型设置一个缩写名字。 它仅用于 XML 配置,意在降低冗余的全限定类名书写。

设置别名前

<select id="getUsers" resultType="com.qn.pojo.User">
    select *
    from mybatis.user
</select>

设置别名后

<select id="getUsers" resultType="user">
    select *
    from mybatis.user
</select>

2.2、配置别名

可以单独配置一个实体类的别名,也可以直接配置扫描一个包下全部的实体类;

指定一个,MyBatis会使用 实体类的首字母小写的非限定类名来作为它的别名;

直接在实体类上添加注释 @Alias("user")

也可以使用首字母大小的方式,mybatis 内部机制会自己进行检索。

  1. 指定一个包名,MyBatis 会在包名下面搜索需要的 实体类

    <typeAliases>
        <package name="com.qn.pojo"/>
    </typeAliases>
    
  2. 指定一个实体类的别名

    <typeAliases>
        <typeAlias type="com.qn.pojo.User" alias="user"/>
    </typeAliases>
    
  3. 使用 @Alias() 注解配置实体类别名

    @Alias("user")
    public class User {
        private int id;
        private String name;
        private String pwd;
    }
    

下面是一些为常见的 Java 类型内建的类型别名。它们都是不区分大小写的;

注意,为了应对原始类型的命名重复,采取了特殊的命名风格。

别名 映射的类型
_byte byte
_long long
_short short
_int int
_integer int
_double double
_float float
_boolean boolean
string String
byte Byte
long Long
short Short
int Integer
integer Integer
double Double
float Float
boolean Boolean
date Date
decimal BigDecimal
bigdecimal BigDecimal
object Object
map Map
hashmap HashMap
list List
arraylist ArrayList
collection Collection
iterator Iterator

3、CRUD

代码中用到了 lombok 和 junit

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.20</version>
</dependency>
<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.12</version>
    <scope>test</scope>
</dependency>

3.1、编写实体类 User

// 使用 Lombok 注解快速生成 构造方法
@Data
@AllArgsConstructor
@NoArgsConstructor
@Alias("user")
public class User {
    private int id;
    private String name;
    private String pwd;
}

3.2、编写UserMapper接口

public interface UserMapper {
    // 查询所有用户
    List<User> getUsers();

    // 根据ID查询用户
    User getUserById(@Param("id") int id);

    // 添加用户
    int addUser(User user);

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

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

3.3、在 mybatis 配置文件中 注册 UserMapper

<mappers>
    <mapper class="com.qn.dao.UserMapper"/>
</mappers>

3.4、编写 UserMapper.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">
<mapper namespace="com.qn.dao.UserMapper">
    <select id="getUsers" resultType="user">
        select *
        from mybatis.user
    </select>
    <select id="getUserById" parameterType="int" resultType="user">
        select *
        from mybatis.user
        where id = #{id}
    </select>
    <insert id="addUser" parameterType="User">
        insert into mybatis.user (id, name, pwd)
        values (#{id}, #{name}, #{pwd});
    </insert>
    <update id="updateUser" parameterType="User">
        update mybatis.user
        set name = #{name},
            pwd  =#{pwd}
        where id = #{id}
    </update>
    <delete id="deleteUser" parameterType="int">
        delete
        from mybatis.user
        where id = #{id}
    </delete>
</mapper>

3.5、编写测试类,进行测试

这里使用 junit 进行测试

2.5.1、查询

查询所有

@Test
public void getUsers() {
    SqlSession sqlSession = MybatisUtil.getSqlSession();
    UserMapper mapper = sqlSession.getMapper(UserMapper.class);
    for (User user : mapper.getUsers()) {
        System.out.println(user);
    }
}

结果:

根据ID查询

@Test
public void getUserById() {
    SqlSession sqlSession = MybatisUtil.getSqlSession();
    UserMapper mapper = sqlSession.getMapper(UserMapper.class);
    User user = mapper.getUserById(1);
    System.out.println(user);
}

结果:

2.5.2、添加

  • 这里要注意,对数据库进行增删改 需要提交事务
    • sqlSession.commit();
@Test
public void addUser() {
    SqlSession sqlSession = MybatisUtil.getSqlSession();
    UserMapper mapper = sqlSession.getMapper(UserMapper.class);
    int i = mapper.addUser(new User(10, "遇见星光", "1234456"));
    sqlSession.commit(); // 对数据库进行增删改 需要提交事务
    System.out.println(i);
}

结果:

2.5.3、修改

@Test
public void updateUser() {
    SqlSession sqlSession = MybatisUtil.getSqlSession();
    UserMapper mapper = sqlSession.getMapper(UserMapper.class);
    int i = mapper.updateUser(new User(9, "遇见星光", "999999"));
    sqlSession.commit(); // 对数据库进行增删改 需要提交事务
    System.out.println(i);
}

结果:

2.5.4、删除

@Test
public void deleteUser() {
    SqlSession sqlSession = MybatisUtil.getSqlSession();
    UserMapper mapper = sqlSession.getMapper(UserMapper.class);
    int i = mapper.deleteUser(10);
    sqlSession.commit(); // 对数据库进行增删改 需要提交事务
    System.out.println(i);
}

结果:

4、注意

对数据库进行增删改需要提交事务

sqlSession.commit();

posted @ 2021-05-10 16:31  遇见星光  阅读(43)  评论(0编辑  收藏  举报