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 或者叫做sql的id-->
<!-- 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。
parameterType和resultType
parameterType:指定輸入參數類型,mybatis通過ognl從輸入對象中獲取參數值拼接在sql中。
resultType:指定輸出結果類型,mybatis將sql查詢結果的一行記錄數據映射爲resultType指定類型的對象。如果有多條數據,則分別進行映射,並把對象放到容器List中
selectOne和selectList
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();
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.