MyBatis的CRUD操做

1.1 建立maven工程,導入座標

File -> New -> Module
image.pngjava

Maven -> Module SDK -> Next
image.pngmysql

Finish
image.pngsql

導入座標
image.pngmybatis

1.2 建立數據表對應的pojo與dao接口

1.2.1 建立pojo

1)User類

import java.io.Serializable;
import java.util.Date;

public class User implements Serializable {
    private Integer id;
    private String username;
    private Date birthday;
    private String sex;
    private String address;

    public User() {
    }

    public User(Integer id, String username, Date birthday, String sex, String address) {
        this.id = id;
        this.username = username;
        this.birthday = birthday;
        this.sex = sex;
        this.address = address;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public Date getBirthday() {
        return birthday;
    }

    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", birthday=" + birthday +
                ", sex='" + sex + '\'' +
                ", address='" + address + '\'' +
                '}';
    }
}

2)QueryVo類

import java.io.Serializable;

public class QueryVo implements Serializable {
    private User user;

    public User getUser() {
        return user;
    }

    public void setUser(User user) {
        this.user = user;
    }

    @Override
    public String toString() {
        return "QueryVo{" +
                "user=" + user +
                '}';
    }
}

1.2.2 建立dao接口

public interface UserDao {
    /**
     * 查詢全部
     * @return
     */
    List<User> findAll();

    /**
     * 保存用戶
     * @param user
     */
    void saveUser(User user);

    /**
     * 更新用戶
     * @param user
     */
    void updateUser(User user);

    /**
     * 刪除用戶
     * @param id
     */
    void deleteUser(Integer id);

    /**
     * 根據id查詢用戶
     * @param id
     */
    User findById(Integer id);

    /**
     * 根據名稱模糊查詢
     * @param username
     * @return
     */
    List<User> findByUsername(String username);

    /**
     * 查詢用戶的總記錄數
     * @return
     */
    Integer findTotal();

    /**
     * 根據pojo查詢用戶
     */
    List<User> findByQueryVo(QueryVo queryVo);
}

1.3 建立Mybatis配置文件

1.3.1 建立Mybatis主配置文件

<?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>
    <!-- 環境,能夠配置多個,default:指定採用哪一個環境 -->
    <environments default="development">
        <!-- id:environment的惟一標識 -->
        <environment id="development">
            <!-- 事務管理器,JDBC類型的事務管理器 -->
            <transactionManager type="JDBC"></transactionManager>
            <!-- 數據源,池類型的數據源 -->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>
                <property name="username" value="root"/>
                <property name="password" value="root"/>
            </dataSource>
        </environment>
    </environments>
    
    <!-- 映射配置文件 -->
    <mappers>
        <mapper resource="com/mybatis/dao/UserDao.xml"></mapper>
    </mappers>
</configuration>

1.3.1 建立Mybatis映射配置文件

<?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.mybatis.dao.UserDao">
    <!-- 查詢全部 -->
    <select id="findAll" resultType="com.mybatis.domain.User">
        SELECT * FROM user
    </select>

    <!-- 保存用戶 -->
    <insert id="saveUser" parameterType="com.mybatis.domain.User">
        INSERT INTO user(username,birthday,sex,address) values(#{username},#{birthday},#{sex},#{address})
    </insert>

    <!-- 更新用戶 -->
    <update id="updateUser" parameterType="com.mybatis.domain.User">
        UPDATE user
        SET username = #{username},
            birthday = #{birthday},
            sex = #{sex},
            address = #{address}
        WHERE id = #{id}
    </update>

    <!-- 刪除用戶 -->
    <delete id="deleteUser" parameterType="java.lang.Integer">
        DELETE FROM user WHERE id = #{id}   <!-- 當只有一個參數時,參數名稱能夠任意 -->
    </delete>

    <!-- 根據id查詢用戶 -->
    <select id="findById" parameterType="java.lang.Integer" resultType="com.mybatis.domain.User">
        SELECT * FROM user WHERE id = #{id}
    </select>

    <!-- 根據名稱模糊查詢 -->
    <select id="findByUsername" parameterType="java.lang.String" resultType="com.mybatis.domain.User">
        SELECT * FROM user WHERE username LIKE #{%username%}
    </select>

    <!-- 查詢用戶的總記錄數 -->
    <select id="findTotal" resultType="java.lang.Integer">
        SELECT COUNT(id) FROM user
    </select>

    <!-- 根據pojo查詢用戶 -->
    <select id="findByQueryVo" parameterType="com.mybatis.domain.QueryVo" resultType="com.mybatis.domain.User">
        SELECT * FROM user WHERE username = #{user.username}
    </select>
</mapper>

1.4 MyBatis執行測試

1.4.1 測試主類

public class MybatisTest {

    private InputStream inputStream;
    private SqlSessionFactoryBuilder sqlSessionFactoryBuilder;
    private SqlSessionFactory sqlSessionFactory;
    private SqlSession sqlSession;
    private UserDao userDao;

    @Before
    public void init() throws Exception{
        //1. 讀取配置文件
        this.inputStream = Resources.getResourceAsStream("SqlMapConfig.xml");
        //2. 獲取SqlSessionFactoryBuilder
        this.sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
        //3. 獲取SqlSessionFactory
        this.sqlSessionFactory = sqlSessionFactoryBuilder.build(inputStream);
        //4. 獲取SqlSession
        this.sqlSession = sqlSessionFactory.openSession();
        //5. 獲取接口的代理對象
        this.userDao = sqlSession.getMapper(UserDao.class);
    }

    @After
    public void destroy() throws Exception{
        //8. 提交事務
        sqlSession.commit();
        //9. 關閉資源
        sqlSession.close();
        inputStream.close();
    }

    /**
     * 查詢全部
     */
    @Test
    public void testFindAll() throws Exception {
        List<User> userList = this.userDao.findAll();
        for (User user : userList) {
            System.out.println(user);
        }
    }

    /**
     * 保存用戶
     */
    @Test
    public void testSaveUser() throws Exception {
        //6. 利用代理對象調用接口中的方法
        User user = new User();
        user.setUsername("找老劉");
        user.setBirthday(new Date());
        user.setSex("男");
        user.setAddress("上海陸家嘴");
        this.userDao.saveUser(user);
    }

    /**
     * 更新用戶
     */
    @Test
    public void testUpdateUser() throws Exception {
        User user = new User();
        user.setId(53);
        user.setUsername("王五");
        user.setBirthday(new Date());
        user.setSex("男");
        user.setAddress("香格里拉");
        userDao.updateUser(user);
    }

    /**
     * 刪除用戶
     */
    @Test
    public void testDeleteUser() throws Exception {
        userDao.deleteUser(53);
    }

    /**
     * 根據id查詢用戶
     */
    @Test
    public void testFindById() throws Exception {
        User user = userDao.findById(51);
        System.out.println(user);
    }

    /**
     * 根據名稱模糊查詢
     */
    @Test
    public void testFindByUsername() throws Exception {
        List<User> userList = userDao.findByUsername("老王");
        for (User user : userList) {
            System.out.println(user);
        }
    }

    /**
     * 查詢用戶的總記錄數
     */
    @Test
    public void testFindTotal() throws Exception {
        Integer total = userDao.findTotal();
        System.out.println(total);
    }

    /**
     * 根據pojo查詢用戶
     */
    @Test
    public void testFindByQueryVo() throws Exception {
        User user = new User();
        user.setUsername("tom");
        QueryVo queryVo = new QueryVo();
        queryVo.setUser(user);
        List<User> userList = userDao.findByQueryVo(queryVo);
        for (User u : userList) {
            System.out.println(u);
        }
    }
}

1.4.2 執行結果

-- 執行findAll()
User{id=41, username='張三', birthday=Wed Mar 27 18:47:08 CST 2019, sex='男', address='北京'}
User{id=42, username='李四', birthday=Wed Mar 27 18:47:08 CST 2019, sex='男', address='上海'}
User{id=43, username='王五', birthday=Wed Mar 27 18:47:08 CST 2019, sex='男', address='廣州'}
相關文章
相關標籤/搜索