<select>,<insert>,<delete>,<update>
的 id 屬性必須和持久層接口的 方法名相同。/** * 根據 id 查詢 * @param userId * @return */ User findById(Integer userId);
<!-- 根據 id 查詢 -->
<select id="findById" resultType="cn.myp666.domain.User" parameterType="int">select * from user where id = #{uid}
</select>
細節:
java queue poll,resultType 屬性: 用于指定結果集的類型。
parameterType 屬性:用于指定傳入參數的類型。
sql 語句中使用#{}字符:
Java queue,#{}中內容的寫法:
/**
*
* <p>Title: MybastisCRUDTest</p>
* <p>Description: 測試 mybatis 的 crud 操作</p>
*
*/
public class MybastisCRUDTest {
private InputStream in ;
private SqlSessionFactory factory;
private SqlSession session;
private IUserDao userDao;@Test
public void testFindOne() {
//6.執行操作User user = userDao.findById(41);System.out.println(user);
}@Before//在測試方法執行之前執行
public void init()throws Exception {
//1.讀取配置文件in = Resources.getResourceAsStream("SqlMapConfig.xml");
//2.創建構建者對象SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
//3.創建 SqlSession 工廠對象factory = builder.build(in);
//4.創建 SqlSession 對象session = factory.openSession();
//5.創建 Dao 的代理對象userDao = session.getMapper(IUserDao.class);
}@After//在測試方法執行完成之后執行
public void destroy() throws Exception{session.commit();
//7.釋放資源session.close();in.close();
}
}
/**
* 保存用戶
* @param user
* @return 影響數據庫記錄的行數
*/
int saveUser(User user);
<!-- 保存用戶-->
<insert id="saveUser" parameterType="cn.myp666.domain.User">insert into user(username,birthday,sex,address)
values(#{username},#{birthday},#{sex},#{address})
</insert>
細節:
Mybatis框架,parameterType 屬性:
代表參數的類型,因為我們要傳入的是一個類的對象,所以類型就寫類的全名稱。
sql 語句中使用#{}字符:
它代表占位符,相當 jdbc 的?,都是用于執行語句時替換實際的數據。
具體的數據是由#{}里面的內容決定的。
#{}中內容的寫法:
由于我們保存方法的參數是 一個 User 對象,此處要寫 User 對象中的屬性名稱。
它用的是 ognl 表達式。
ognl 表達式:
@Test
public void testSave(){User user = new User();user.setUsername("modify User property");user.setAddress("北京市順義區");user.setSex("男");user.setBirthday(new Date());System.out.println("保存操作之前:"+user);
//5.執行保存方法userDao.saveUser(user);System.out.println("保存操作之后:"+user);
}
打開 Mysql 數據庫發現并沒有添加任何記錄,原因是什么?
這一點和 jdbc 是一樣的,我們在實現增刪改時一定要去控制事務的提交,那么在 mybatis 中如何控制事務
提交呢?
可以使用: session.commit();
來實現事務提交。加入事務提交后的代碼如下:
@After//在測試方法執行完成之后執行
public void destroy() throws Exception{session.commit();
//7.釋放資源session.close();in.close();
}
<insert id="saveUser" parameterType="USER">
<!-- 配置保存時獲取插入的 id -->
<selectKey keyColumn="id" keyProperty="id" resultType="int">select last_insert_id();
</selectKey>insert into user(username,birthday,sex,address)
values(#{username},#{birthday},#{sex},#{address})
</insert>
/**
* 更新用戶
* @param user
* @return 影響數據庫記錄的行數
*/
int updateUser(User user);
<!-- 更新用戶 -->
<update id="updateUser" parameterType="cn.myp666.domain.User">update user set username=#{username},birthday=#{birthday},sex=#{sex},
address=#{address} where id=#{id}
</update>
@Test
public void testUpdateUser()throws Exception{
//1.根據 id 查詢User user = userDao.findById(52);
//2.更新操作user.setAddress("北京市順義區");int res = userDao.updateUser(user);System.out.println(res);
}
/**
* 根據 id 刪除用戶
* @param userId
* @return
*/
int deleteUser(Integer userId);
<!-- 刪除用戶 -->
<delete id="deleteUser" parameterType="java.lang.Integer">delete from user where id = #{uid}
</delete>
@Test
public void testDeleteUser() throws Exception {
//6.執行操作int res = userDao.deleteUser(52);System.out.println(res);
}
/**
* 根據名稱模糊查詢
* @param username
* @return
*/
List<User> findByName(String username);
<!-- 根據名稱模糊查詢 -->
<select id="findByName" resultType="cn.myp666.domain.User" parameterType="String">select * from user where username like #{username}
</select>
@Testpublic void testFindByName(){
//5.執行查詢一個方法List<User> users = userDao.findByName("%王%");for(User user : users){System.out.println(user);}}
在控制臺輸出的執行 SQL 語句如下:
<!-- 根據名稱模糊查詢 -->
<select id="findByName" parameterType="string" resultType="cn.myp666.domain.User">select * from user where username like '%${value}%'
</select>
${value}
的寫@Test
public void testFindByName(){//5.執行查詢一個方法List<User> users = userDao.findByName("王");for(User user : users){System.out.println(user);}
}
#{}與${}的區別:
value 或其它名稱。
只能是 value。
/**
* 查詢總記錄條數
* @return
*/
int findTotal();
<!-- 查詢總記錄條數 -->
<select id="findTotal" resultType="int">select count(*) from user;
</select>
@Test
public void testFindTotal() throws Exception {
//6.執行操作int res = userDao.findTotal();System.out.println(res);
}
版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。
工作时间:8:00-18:00
客服电话
电子邮件
admin@qq.com
扫码二维码
获取最新动态