上一篇文章:《Mybatis基本知識十六:查詢緩存之第三方查詢緩存》
若文中有紕漏,請多多指正!!!
1.前言
使用Mybatis進(jìn)行開發(fā),不僅可以使用mapper配置文件進(jìn)行開發(fā),也可以使用注解的方式。映射文件中無非就是存放著增、刪、改、查的SQL映射標(biāo)簽,Mybatis注解式開發(fā)就是要替換映射文件中的SQL標(biāo)簽。
本章節(jié)主要講解單表式注解開發(fā),用于注解開發(fā)的入門案例講解,后續(xù)將講解動態(tài)SQL注解式開發(fā)以及關(guān)聯(lián)關(guān)系型注解開發(fā)。
2.數(shù)據(jù)準(zhǔn)備(MySql數(shù)據(jù)庫)
/**商品信息*/create table productinfo( id int primary key auto_increment, --主鍵 proName varchar(50),--商品名稱 proNo varchar(50), --商品編號 proDescription varchar(200)--商品描述);
public class ProductInfo { private Integer id;//主鍵 private String proName;//商品名稱 private String proNo;//商品編號 private String proDescription;//商品描述}
3.單表的增刪改查注解配置
1)Mybatis進(jìn)行注解開發(fā)大概有以下幾點(diǎn)事項:
- 只需配置主配置文件。
- mapper配置文件不再需要配置。
- 接口中進(jìn)行注解配置。
2)關(guān)于插入數(shù)據(jù)自動獲取主鍵的問題(示例中都有配置):
- 可以通過配置insert標(biāo)簽的屬性獲取主鍵:
useGeneratedKeys: 配置此屬性會告訴MyBatis利用JDBC 的 getGeneratedKeys 方法來取出由數(shù)據(jù)(比如:MySQL 和 SQL Server 這樣的數(shù)據(jù)庫中自動遞增字段)內(nèi)部生成的主鍵。默認(rèn):false。
keyProperty: 標(biāo)記一個屬性(一般為要映射實(shí)體的屬性), MyBatis 會通過 getGeneratedKeys 或者通過 insert 語句的 selectKey 子元素設(shè)置它的值。如果希望得到多個生成的列,也可以是逗號分隔的屬性名稱列表。
keyColumn :通過生成的鍵值設(shè)置表中的列名。如果希望得到多個生成的列,也可以是逗號分隔的屬性名稱列表。如果數(shù)據(jù)庫支持自動生成主鍵的字段(比如 MySQL 和 SQL Server),那么你可以設(shè)置 useGeneratedKeys=”true”,然后再把 keyProperty 設(shè)置到目標(biāo)屬性上就OK。如果數(shù)據(jù)庫還支持多行插入, 也可以傳入一個數(shù)組或集合,并返回自動生成的主鍵。
對于不支持自動生成主鍵類型的數(shù)據(jù)庫或可能不支持自動生成主鍵的JDBC 驅(qū)動來說,可以使用標(biāo)簽獲取主鍵。
3)增刪改查的簡單配置如下:
/**Dao層接口*/public interface ProductInfoDao { /**保存信息,并返回主鍵**/ @Insert("insert into ProductInfo(proName,proNo,proDescription) values(#{proName},#{proNo},#{proDescription})") @Options(useGeneratedKeys = true,keyProperty="id",keyColumn="id") //@SelectKey(statement="select @@identity",keyColumn="id",keyProperty="id",before=false,resultType = int.class) void saveProducrInfoCatchID(ProductInfo proInfo); /**獲取所有返回LIST*/ @Select("select * from ProductInfo") @Results({ @Result(id=true,property="id",column="id"), @Result(property="proName",column="proName"), @Result(property="proNo",column="proNo"), @Result(property="proDescription",column="proDescription") }) List findAllListInfo(); /**根據(jù)主鍵查詢*/ @Select("select * from ProductInfo where id = #{id}") ProductInfo findById(int id); /**根據(jù)商品編號模糊查詢*/ @Select("select * from ProductInfo where proNo like concat('%',#{proNo},'%')") List findProInfoByProNo(String proNo); //刪除 @Delete("delete from productInfo where id = #{id}") void deleteByID(int id); //修改 @Update("update productInfo set proName = #{proName},proNo=#{proNo},proDescription=#{proDescription} where id = #{id}") void updateProduct(ProductInfo info);}
public class TestDemo { private ProductInfoDao dao; SqlSession sqlSession = null; @Before public void setUp() throws Exception{ sqlSession = MyBatisUtil.getSqlSession(); dao = sqlSession.getMapper(ProductInfoDao.class); } /**保存信息,并返回主鍵**/ @Test public void saveProducrInfoCatchID(){ ProductInfo proInfo = new ProductInfo("電冰箱","002","最新款電冰箱"); System.out.println("執(zhí)行前:"+proInfo); dao.saveProducrInfoCatchID(proInfo); System.out.println("執(zhí)行后:"+proInfo); sqlSession.commit();//提交 } //查詢所有 @Test public void findAllListInfo(){ List list = dao.findAllListInfo(); if(list != null){ for (ProductInfo productInfo : list) { System.out.println(productInfo); } } } /**根據(jù)主鍵查詢*/ @Test public void findById(){ ProductInfo pro = dao.findById(4); System.out.println(pro); } /**根據(jù)商品編號模糊查詢*/ @Test public void findProInfoByProNo(){ List list = dao.findProInfoByProNo("001"); if(list != null){ for (ProductInfo productInfo : list) { System.out.println(productInfo); } } } /**簡單刪除*/ @Test public void deleteByID(){ dao.deleteByID(7); } /**簡單修改*/ @Test public void updateProductById(){ //1.查詢修改對象 ProductInfo beforeInfo = dao.findById(6); System.out.println("執(zhí)行前beforeInfo:"+beforeInfo); //2.修改值 beforeInfo.setProDescription("修改了電視"); //3.執(zhí)行更新操作 dao.updateProduct(beforeInfo); //4.再查詢 ProductInfo afterInfo = dao.findById(6); System.out.println("執(zhí)行后afterInfo:"+afterInfo); } @After public void setDown(){ if(sqlSession != null) sqlSession.close(); }}
進(jìn)行完DAO接口的注解配置,一個簡單的單表的增刪改查也就完成了。有興趣的learner可以親自動手試一下。
4.基本注解
增刪改查相關(guān)注解
結(jié)果集映射相關(guān)注解
結(jié)果集映射相關(guān)注解
5.下載練習(xí)
鏈接:https://pan.baidu.com/s/1wxDPaght70sIPEV-DEeT_w 提取碼:4im4
總結(jié)
以上是生活随笔為你收集整理的@select注解_Mybatis基本知识十七:Mybatis注解式开发-单表注解式开发的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。