當前位置:
首頁 > 知識 > 原生Dao開發方法需要程序員編寫Dao介面和Dao實現類

原生Dao開發方法需要程序員編寫Dao介面和Dao實現類

目錄結構

原生Dao開發方法需要程序員編寫Dao介面和Dao實現類

User.xml 映射文件:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE mapper
  3. PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  4. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  5. <!-- namespace: 命名空間,做 sql隔離 -->
  6. <mapper namespace="test">
  7. <!--
  8. id: sql語句唯一標識
  9. parameterType: 指定傳入參數類型
  10. resultType: 返回結果集類型
  11. #{}:佔位符,起到佔位作用,如果傳入的是基本數據類型(String,Integer...),那麼#{}中的變數名稱可以隨意寫
  12. -->
  13. <select id="findUserById" parameterType="java.lang.Integer" resultType="com.jadan.po.User">
  14. select * from user where id = #{id}
  15. </select>
  16. <!--
  17. 如果返回結果為集合,可以調用selectList方法,這個方法返回的結果就是一個集合,所以映射文件中應該配置成集合泛型的類型
  18. ${}拼接符: 字元串原樣拼接,如果傳入的參數是基本類型,那麼${}中變數名稱必須是value
  19. 注意: 拼接符有sql注入的風險,所以慎重使用
  20. -->
  21. <select id="findUserByUsername" parameterType="java.lang.String" resultType="com.jadan.po.User">
  22. select * from user where username like "%${value}%"
  23. </select>
  24. <!--
  25. #{}: 如果傳入的是pojo類型,那麼#{}中的變數名稱必須是pojo中對象的屬性.屬性.屬性...
  26. 如果要返回資料庫自增主鍵: 可以使用select LAST_INSERT_ID()
  27. -->
  28. <insert id="insertUser" parameterType="com.jadan.po.User" >
  29. <!-- 執行select LAST_INSERT_ID() 資料庫函數,返回自增的主鍵
  30. keyProperty: 將返回的主鍵放入傳入參數的Id中保存
  31. order: 當前函數相對於insert語句的執行順序,在insert前執行是before,在insert後執行是AFTER
  32. resultType: id的類型,也就是keyProperties中屬性的類型
  33. -->
  34. <selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">
  35. select LAST_INSERT_ID()
  36. </selectKey>
  37. insert into user(username,birthday,sex,address) values(#{username},#{birthday},#{sex},#{address})
  38. </insert>
  39. <!-- 更新用戶 -->
  40. <update id="updateUserById" parameterType="com.jadan.po.User">
  41. update user set sex = #{sex} where id = #{id}
  42. </update>
  43. <!-- 刪除用戶 -->
  44. <delete id="delUserById" parameterType="java.lang.Integer">
  45. delete from user where id = #{id}
  46. </delete>
  47. </mapper>

SqlMapConfig.xml 核心配置文件:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE configuration
  3. PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  4. "http://mybatis.org/dtd/mybatis-3-config.dtd">
  5. <configuration>
  6. <!-- 和Spring整合後 environments配置將廢除 -->
  7. <environments default="development">
  8. <environment id="development">
  9. <!-- 使用jdbc事務管理 -->
  10. <transactionManager type="JDBC" />
  11. <!-- 資料庫連接池 -->
  12. <dataSource type="POOLED">
  13. <property name="driver" value="com.mysql.jdbc.Driver"/>
  14. <property name="url" value="jdbc:mysql://localhost:3306/mybatis01?characterEncoding=utf-8"/>
  15. <property name="username" value="root"/>
  16. <property name="password" value="1234"/>
  17. </dataSource>
  18. </environment>
  19. </environments>
  20. <mappers>
  21. <mapper resource="User.xml"/>
  22. </mappers>
  23. </configuration>

UserDao介面:

  1. package com.jadan.dao;
  2. import java.util.List;
  3. import com.jadan.po.User;
  4. public interface UserDao {
  5. // 通過id查用戶
  6. public User findUserById(Integer id);
  7. // 通過用戶名查詢用戶
  8. public List<User> findUserByUsername(String username);
  9. // 插入用戶數據
  10. public void insertUser(User user);
  11. // 更改數據
  12. public void updateUserById(User user);
  13. // 刪除數據
  14. public void delUserById(Integer id);
  15. }

UserDaoImpl 實現類:

  1. package com.jadan.dao;
  2. import java.util.List;
  3. import org.apache.ibatis.session.SqlSession;
  4. import org.apache.ibatis.session.SqlSessionFactory;
  5. import com.jadan.po.User;
  6. public class UserDaoImpl implements UserDao {
  7. private SqlSessionFactory sqlSessionFactory;
  8. // 通過構造方法注入會話工廠
  9. public UserDaoImpl(SqlSessionFactory sqlSessionFactory) {
  10. this.sqlSessionFactory = sqlSessionFactory;
  11. }
  12. // 通過id查詢用戶
  13. public User findUserById(Integer id) {
  14. // sqlSession是線程不安全的,所以它的最佳使用範圍在方法體內
  15. SqlSession openSession = sqlSessionFactory.openSession();
  16. User user = openSession.selectOne("test.findUserById", 1);
  17. return user;
  18. }
  19. // 通過用戶名查詢用戶
  20. public List<User> findUserByUsername(String username) {
  21. SqlSession openSession = sqlSessionFactory.openSession();
  22. List<User> list = openSession.selectList("test.findUserByUsername", username);
  23. return list;
  24. }
  25. // 插入用戶數據
  26. public void insertUser(User user) {
  27. SqlSession openSession = sqlSessionFactory.openSession();
  28. openSession.insert("test.insertUser", user);
  29. // 記得提交事務
  30. openSession.commit();
  31. }
  32. // 更改用戶數據
  33. public void updateUserById(User user) {
  34. SqlSession openSession = sqlSessionFactory.openSession();
  35. openSession.update("test.updateUserById", user);
  36. openSession.commit();
  37. }
  38. // 刪除用戶
  39. public void delUserById(Integer id) {
  40. SqlSession openSession = sqlSessionFactory.openSession();
  41. openSession.delete("test.delUserById", id);
  42. openSession.commit();
  43. }
  44. }

UserDaoTest 測試類:

  1. package mybatis_day01;
  2. import java.io.InputStream;
  3. import java.util.Date;
  4. import java.util.List;
  5. import org.apache.ibatis.io.Resources;
  6. import org.apache.ibatis.session.SqlSessionFactory;
  7. import org.apache.ibatis.session.SqlSessionFactoryBuilder;
  8. import org.junit.Before;
  9. import org.junit.Test;
  10. import com.jadan.dao.UserDao;
  11. import com.jadan.dao.UserDaoImpl;
  12. import com.jadan.po.User;
  13. public class UserDaoTest {
  14. private SqlSessionFactory factory;
  15. // 作用: 在測試方法前執行這個初始化方法
  16. @Before
  17. public void setUp() throws Exception {
  18. // 核心配置文件名
  19. String resource = "SqlMapConfig.xml";
  20. // 通過流將核心配置文件讀取進來
  21. InputStream inputStream = Resources.getResourceAsStream(resource);
  22. // 通過核心配置文件輸入流來創建會話工廠
  23. factory = new SqlSessionFactoryBuilder().build(inputStream);
  24. }
  25. // 通過id查詢用戶
  26. @Test
  27. public void testFindUserById() throws Exception {
  28. UserDao userDao = new UserDaoImpl(factory);
  29. User user = userDao.findUserById(1);
  30. System.out.println(user);
  31. }
  32. // 通過用戶名模糊查詢用戶
  33. @Test
  34. public void testFindUserByUsername() throws Exception {
  35. UserDao userDao = new UserDaoImpl(factory);
  36. List<User> list = userDao.findUserByUsername("王");
  37. System.out.println(list);
  38. }
  39. // 測試: 插入用戶數據
  40. @Test
  41. public void testInsertUser() throws Exception {
  42. UserDao userDao = new UserDaoImpl(factory);
  43. User user = new User();
  44. user.setUsername("Jadan");
  45. user.setBirthday(new Date());
  46. user.setSex("男");
  47. user.setAddress("福建平潭");
  48. userDao.insertUser(user);
  49. }
  50. // 測試: 更新用戶數據
  51. @Test
  52. public void testUpdateUserById() throws Exception {
  53. UserDao userDao = new UserDaoImpl(factory);
  54. User user = new User();
  55. user.setId(41);
  56. user.setSex("女");
  57. userDao.updateUserById(user);
  58. }
  59. // 測試: 刪除用戶
  60. @Test
  61. public void testDelUserById() throws Exception {
  62. UserDao userDao = new UserDaoImpl(factory);
  63. userDao.delUserById(41);
  64. }
  65. }

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 程序員小新人學習 的精彩文章:

Cron表達式、定時任務
js中setTimeOut()和setInterval()的使用——程序執行時間控制

TAG:程序員小新人學習 |