使用Mybatis進行開發,不僅可以使用mapper配置檔案進行開發,也可以使用注解的方式。映射檔案中無非就是存放着增、删、改、查的SQL映射标簽,Mybatis注解式開發就是要替換映射檔案中的SQL标簽。
本章節主要講解單表式注解開發,用于注解開發的入門案例講解,後續将講解動态SQL注解式開發以及關聯關系型注解開發。
2.資料準備(MySql資料庫)- 表結構
/**商品資訊*/
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進行注解開發大概有以下幾點事項:
- 隻需配置主配置檔案。
- mapper配置檔案不再需要配置。
- 接口中進行注解配置。
2)關于插入資料自動擷取主鍵的問題(示例中都有配置):
- 可以通過配置insert标簽的屬性擷取主鍵:
useGeneratedKeys: 配置此屬性會告訴MyBatis利用JDBC 的 getGeneratedKeys 方法來取出由資料(比如:MySQL 和 SQL Server 這樣的資料庫中自動遞增字段)内部生成的主鍵。預設:false。
keyProperty: 标記一個屬性(一般為要映射實體的屬性), MyBatis 會通過 getGeneratedKeys 或者通過 insert 語句的 selectKey 子元素設定它的值。如果希望得到多個生成的列,也可以是逗号分隔的屬性名稱清單。
keyColumn :通過生成的鍵值設定表中的列名。如果希望得到多個生成的列,也可以是逗号分隔的屬性名稱清單。如果資料庫支援自動生成主鍵的字段(比如 MySQL 和 SQL Server),那麼你可以設定 useGeneratedKeys=”true”,然後再把 keyProperty 設定到目标屬性上就OK。如果資料庫還支援多行插入, 也可以傳入一個數組或集合,并傳回自動生成的主鍵。
- 通過<selectKey/>擷取主鍵
對于不支援自動生成主鍵類型的資料庫或可能不支援自動生成主鍵的JDBC 驅動來說,可以使用<selectKey/>标簽擷取主鍵。
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<ProductInfo> findAllListInfo(); /**根據主鍵查詢*/
@Select("select * from ProductInfo where id = #{id}")
ProductInfo findById(int id); /**根據商品編号模糊查詢*/
@Select("select * from ProductInfo where proNo like concat('%',#{proNo},'%')")
List<ProductInfo> 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("執行前:"+proInfo);
dao.saveProducrInfoCatchID(proInfo); System.out.println("執行後:"+proInfo);
sqlSession.commit();//送出
}
//查詢所有
@Test
public void findAllListInfo(){
List<ProductInfo> list = dao.findAllListInfo();
if(list != null){
for (ProductInfo productInfo : list) {
System.out.println(productInfo);
}
}
}
/**根據主鍵查詢*/
@Test
public void findById(){
ProductInfo pro = dao.findById(4);
System.out.println(pro);
}
/**根據商品編号模糊查詢*/
@Test
public void findProInfoByProNo(){
List<ProductInfo> 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("執行前beforeInfo:"+beforeInfo);
//2.修改值
beforeInfo.setProDescription("修改了電視");
//3.執行更新操作
dao.updateProduct(beforeInfo);
//4.再查詢
ProductInfo afterInfo = dao.findById(6);
System.out.println("執行後afterInfo:"+afterInfo);
}
@After
public void setDown(){
if(sqlSession != null)
sqlSession.close();
}
}
進行完DAO接口的注解配置,一個簡單的單表的增删改查也就完成了。有興趣的learner可以親自動手試一下。
4.基本注解- 增删改查相關注解

增删改查相關注解
- 結果集映射相關注解
結果集映射相關注解
5.下載下傳練習連結:https://pan.baidu.com/s/1wxDPaght70sIPEV-DEeT_w
提取碼:4im4