mybatis學習記錄------2
阿新 • • 發佈:2019-02-07
.com _id pojo uid 入參 ast sele id字段 new
一 單條記錄查詢
上篇博客的例子便是單條記錄查詢
二 多條記錄查詢
1 在映射文件中加入如下sql查詢,${}:表示拼接sql串,將接收到的參數不加任何修飾拼接在sql中,${value}:接收輸入參數的內容,如果傳入類型是簡單類型,${}中只能使用value。
<!--根據名稱查找記錄,可能返回多條記錄 resultType:指定就是單條記錄所映射的java對象類型 ${}:表示拼接sql串,將接收到的參數不加任何修飾拼接在sql中。 使用${}拼接sql,容易引起sql註入 ${value}:接收輸入參數的內容,如果傳入類型是簡單類型,${}中只能使用value--> <select id="findUserByName" parameterType="String" resultType="pers.czs.mybatis.po.User"> select * from user where username like ‘%${value}%‘ </select>
2 在測試代碼中加入如下執行代碼,由於查詢可能出現多條,因此應該使用list集合存放selectList查詢出來的多條記錄
@Test public void findUserByNameTest() throwsIOException { //Mybatis配置文件 String resource = "SqlMapConfig.xml"; //得到配置文件流 InputStream inputStream = Resources.getResourceAsStream(resource); //創建會話工廠,傳入配置文件信息 SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);//通過工廠得到SqlSession會話 SqlSession sqlSession = sqlSessionFactory.openSession(); List<User> list = sqlSession.selectList("test.findUserByName", "小明"); System.out.println(list); sqlSession.close(); }
3 運行結果
三 添加用戶(insert)
1 在映射文件中加入相應的代碼:其中parameterType:指定輸入參數類型是pojo,無返回值,若主鍵是自增的,則可以不寫主鍵,mysql會自動分配,我這裏主鍵是ID,是自增的,故沒寫出來
<!--添加用戶 parameterType:指定輸入參數類型是pojo #{}中指定pojo屬性名,接收到pojo對象的屬性值,mybatis通過OGNL獲取對象屬性值 若主鍵是自增的,則可以不寫主鍵,mysql會自動分配,我這裏主鍵是ID,是自增的,故沒寫出來 --> <insert id="insertUser" parameterType="pers.czs.mybatis.po.User"> insert into user (username,birthday,sex,address) value(#{username},#{birthday},#{sex},#{address}) </insert>
2 測試代碼 此處記得使用sqlSession進行commit
@Test
public void insertUserTest() throws IOException {
//Mybatis配置文件
String resource = "SqlMapConfig.xml";
//得到配置文件流
InputStream inputStream = Resources.getResourceAsStream(resource);
//創建會話工廠,傳入配置文件信息
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
//通過工廠得到SqlSession會話
SqlSession sqlSession = sqlSessionFactory.openSession();
User user = new User();
user.setAddress("福建福州");
user.setBirthday(new Date());
user.setSex("男");
user.setUsername("零零七");
sqlSession.insert("test.insertUser", user);
//提交
sqlSession.commit();
sqlSession.close();
}
3 測試結果
四 添加用戶--主鍵返回
1 自增主鍵返回
修改上述插入用戶的映射文件代碼,last_insert_id(),得到剛剛insert進去記錄的主鍵值,只適用自增主鍵,keyProperty:將查詢到的主鍵設置到parameterType指定的對象的特定屬性中,resultType:指定select last_insert_id()的結果類型
<insert id="insertUser" parameterType="pers.czs.mybatis.po.User"> <!--將插入數據的主鍵返回,返回到user對象中 last_insert_id():得到剛剛insert進去記錄的主鍵值,只適用自增主鍵 keyProperty:將查詢到的主鍵設置到parameterType指定的對象的特定屬性中 resultType:指定select last_insert_id()的結果類型 --> <selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer"> select last_insert_id() </selectKey> insert into user (username,birthday,sex,address) value(#{username},#{birthday},#{sex},#{address}) </insert>
2 在測試代碼中加入輸出id的語句
@Test public void insertUserTest() throws IOException { //Mybatis配置文件 String resource = "SqlMapConfig.xml"; //得到配置文件流 InputStream inputStream = Resources.getResourceAsStream(resource); //創建會話工廠,傳入配置文件信息 SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); //通過工廠得到SqlSession會話 SqlSession sqlSession = sqlSessionFactory.openSession(); User user = new User(); user.setAddress("福建福州"); user.setBirthday(new Date()); user.setSex("男"); user.setUsername("零零七"); sqlSession.insert("test.insertUser", user); System.out.println(user.getId()); //提交 sqlSession.commit(); sqlSession.close(); }
3 輸出結果
五 非自增主鍵返回
1 使用mysql的uuid()函數生成主鍵,需要修改表中id字段類型為string,長度設置為35位
思路:
先通過uuid()查詢到主鍵,將主鍵輸入到sql語句中。
執行uuid()語句順序相對於insert語句之前執行
將上面的映射文件代碼改成如下:
<!-- 使用mysql的uuid()生成主鍵 執行過程: 首先通過uuid()得到主鍵,將主鍵設置到user對象的id屬性中 其次在執行insert時,從user對象取出id屬性值 --> <selectKey keyProperty="id" order="BEFORE" resultType="java.lang.String"> select uuid() </selectKey> insert into user (id,username,birthday,sex,address) value(#{id},#{username},#{birthday},#{sex},#{address})
mybatis學習記錄------2