mybaits操作數據庫實例查詢、添加

4.1 實現根據id查詢用戶
4.1.1. 映射文件:
user.xml中添加select標籤,編寫sql
<?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">
<!-- namespace:命名空間,用於隔離sql,還有一個很重要的作用,後面會講 -->
<mapper namespace="test">
 
    <!-- id:statement的id 或者叫做sqlid-->
    <!-- parameterType:聲明輸入參數的類型 -->
    <!-- resultType:聲明輸出結果的類型,應該填寫pojo的全路徑 -->
    <!-- #{}:輸入參數的佔位符,相當於jdbc的? -->
    <select id="queryUserById" parameterType="int"
       resultType="cn.itcast.mybatis.pojo.User">
       SELECT * FROM `user` WHERE id  = #{id}
    </select>
 
</mapper>
4.1.2. 測試程序:
測試程序步驟:
 1. 創建SqlSessionFactoryBuilder對象
 2. 加載SqlMapConfig.xml配置文件
 3. 創建SqlSessionFactory對象
 4. 創建SqlSession對象
 5. 執行SqlSession對象執行查詢,獲取結果User
 6. 打印結果
 7. 釋放資源
MybatisTest編寫測試程序如下:
public class MybatisTest {
    private SqlSessionFactory sqlSessionFactory = null;
    @Before
    public void init() throws Exception {
       // 1. 創建SqlSessionFactoryBuilder對象
       SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
       // 2. 加載SqlMapConfig.xml配置文件
       InputStream inputStream = Resources.getResourceAsStream("SqlMapConfig.xml");
       // 3. 創建SqlSessionFactory對象
       this.sqlSessionFactory = sqlSessionFactoryBuilder.build(inputStream);
    }
    @Test
    public void testQueryUserById() throws Exception {
       // 4. 創建SqlSession對象
       SqlSession sqlSession = sqlSessionFactory.openSession();
       // 5. 執行SqlSession對象執行查詢,獲取結果User
       // 第一個參數是User.xml的statement的id,第二個參數是執行sql需要的參數;
       Object user = sqlSession.selectOne("queryUserById", 1);
       // 6. 打印結果
       System.out.println(user);
       // 7. 釋放資源
       sqlSession.close();
    }
}
4.2 實現根據用戶模糊查詢用戶
方法一
4.2.1. 映射文件
User.xml配置文件中添加如下內容:
    <!-- 如果返回多個結果,mybatis會自動把返回的結果放在list容器中 -->
    <!-- resultType的配置和返回一個結果的配置一樣 -->
    <!—- like ‘%${value}%’-->
    <!—- like “%”#{value}“%”-->
    <select id="queryUserByUsername1" parameterType="string"
       resultType="cn.itcast.mybatis.pojo.User">
       SELECT * FROM `user` WHERE username LIKE #{username}
    </select>
 
4.2.2. 測試程序
MybatisTest中添加測試方法如下:
    @Test
    public void testQueryUserByUsername1() throws Exception {
        // 4. 創建SqlSession對象
       SqlSession sqlSession = sqlSessionFactory.openSession();
       // 5. 執行SqlSession對象執行查詢,獲取結果User
       // 查詢多條數據使用selectList方法
       List<Object> list = sqlSession.selectList("queryUserByUsername1", "%王%");
       // 6. 打印結果
       for (Object user : list) {
           System.out.println(user);
       }
       // 7. 釋放資源
       sqlSession.close();
    }
方法二
4.2.3 映射文件:
User.xml配置文件中添加如下內容:
    <!-- 如果傳入的參數是簡單數據類型,${}裏面必須寫value -->
    <select id="queryUserByUsername2" parameterType="string"
       resultType="cn.itcast.mybatis.pojo.User">
       SELECT * FROM `user` WHERE username LIKE '%${value}%'
    </select>
 
4.2.4 測試程序:
MybatisTest中添加測試方法如下:
@Test
public void testQueryUserByUsername2() throws Exception {
    // 4. 創建SqlSession對象
    SqlSession sqlSession = sqlSessionFactory.openSession();
    // 5. 執行SqlSession對象執行查詢,獲取結果User
    // 查詢多條數據使用selectList方法
    List<Object> list = sqlSession.selectList("queryUserByUsername2", "王");
    // 6. 打印結果
    for (Object user : list) {
       System.out.println(user);
    }
    // 7. 釋放資源
    sqlSession.close();
}
4.2.5. 小結
#{}${}區別
#{}表示一個佔位符號,通過#{}可以實現preparedStatement向佔位符中設置值,自動進行java類型和jdbc類型轉換#{}可以有效防止sql注入 #{}可以接收簡單類型值或pojo屬性值。 如果parameterType傳輸單個簡單類型值,#{}括號中可以是value或其它名稱。
 
${}表示拼接sql串,通過${}可以將parameterType 傳入的內容拼接在sql中且不進行jdbc類型轉換 ${}可以接收簡單類型值或pojo屬性值,如果parameterType傳輸單個簡單類型值,${}括號中只能是value
 parameterTyperesultType
parameterType:指定輸入參數類型,mybatis通過ognl從輸入對象中獲取參數值拼接在sql中。
resultType:指定輸出結果類型,mybatissql查詢結果的一行記錄數據映射爲resultType指定類型的對象。如果有多條數據,則分別進行映射,並把對象放到容器List
 selectOneselectList
selectOne查詢一條記錄,如果使用selectOne查詢多條記錄則拋出異常:
org.apache.ibatis.exceptions.TooManyResultsException: Expected one result (or null) to be returned by selectOne(), but found: 3
   at org.apache.ibatis.session.defaults.DefaultSqlSession.selectOne(DefaultSqlSession.java:70)
selectList可以查詢一條或多條記錄。
4.3. 實現添加用戶
使用的sql
INSERT INTO `user` (username,birthday,sex,address) VALUES
('黃忠','2016-07-26','1','三國')
4.3.1. 映射文件:
User.xml配置文件中添加如下內容:
    <!-- 保存用戶 -->
    <insert id="saveUser" parameterType="cn.itcast.mybatis.pojo.User">
       INSERT INTO `user`
       (username,birthday,sex,address) VALUES
       (#{username},#{birthday},#{sex},#{address})
    </insert>
 
1.1.2. 測試程序
MybatisTest中添加測試方法如下:
@Test
public void testSaveUser() {
    // 4. 創建SqlSession對象
    SqlSession sqlSession = sqlSessionFactory.openSession();
    // 5. 執行SqlSession對象執行保存
    // 創建需要保存的User
    User user = new User();
    user.setUsername("張飛");
    user.setSex("1");
    user.setBirthday(new Date());
    user.setAddress("蜀國");
    sqlSession.insert("saveUser", user);
    System.out.println(user);
    // 需要進行事務提交
    sqlSession.commit();
    // 7. 釋放資源
    sqlSession.close();
}
發佈了42 篇原創文章 · 獲贊 5 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章