通過Mybatis持久化框架實現對數據庫表的增刪改查的簡單例子
(個人心得:我感覺學習一個框架可以先去了解它大致的運行流程,然後再去學習其填充的東西,這樣更加容易理解而且在學的過程中也會聯繫起來。不然一開始就看框架的一些詳細解釋感覺好難懂)
StyleCategory實體類
package com.mybatis.entity;
/**
* @author lyx
*
* 2015-9-2下午7:07:57
*
*com.mybatis.entity.StyleCategory
*
*/
public class StyleCategory {
private int styleId;
private String styleName;
public int getStyleId() {
return styleId;
}
public void setStyleId(int styleId) {
this.styleId = styleId;
}
public String getStyleName() {
return styleName;
}
public void setStyleName(String styleName) {
this.styleName = styleName;
}
public StyleCategory(int styleId, String styleName) {
super();
this.styleId = styleId;
this.styleName = styleName;
}
public StyleCategory(String styleName) {
super();
this.styleName = styleName;
}
public StyleCategory() {
super();
}
}
styleMapper.xml (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">
<mapper namespace="com.mybatis.entity.StyleMapper">
<!-- sql標籤 表示可以被其他語句複用的SQL塊-->
<sql id="queryFields">
styleId,styleName
</sql>
<!-- -->
<resultMap type="StyleCategory" id="styleMap">
<!-- 主鍵映射 -->
<id property="styleId" column="styleId" javaType="int" />
<!-- 數據庫字段到實體類屬性的映射 -->
<result property="styleName" column="styleName"/>
</resultMap>
<!-- 根據style查詢 -->
<select id="getStyleById" parameterType="int" resultType="StyleCategory" >
select
<include refid="queryFields"></include>
from STYLE_CATEGORY where styleId=#{styleId}
</select>
<!-- 查詢全部 -->
<select id="queryAllInfo" resultType="StyleCategory" resultMap="styleMap">
select
*
from STYLE_CATEGORY
</select>
<!-- 插入 -->
<!-- 如果使用的是表中自定義的主鍵就不需要的添加 useGeneratedKeys="true" 否則會報錯:列名無效,Error getting generated key or setting result to parameter object-->
<!-- 設置是否使用JDBC的getGenereatedKeys方法獲取主鍵並賦值到keyProperty設置的領域模型屬性中。MySQL和SQLServer執行auto-generated key field,
因此當數據庫設置好自增長主鍵後,可通過JDBC的getGeneratedKeys方法獲取。但像Oralce等不支持auto-generated key field的數據庫就不能用這種方法獲取主鍵了 -->
<insert id="addStyleInfo" parameterType="StyleCategory" keyProperty="styleId">
<!-- <selectKey resultType="StyleCategory" order="BEFORE" keyProperty="styleId">
select SEQUENCE_STYLECATEGORY.nextval as STYLEID from dual;
</selectKey> -->
insert into STYLE_CATEGORY (styleId,styleName) values (SEQUENCE_STYLECATEGORY.nextval,#{styleName})
</insert>
<!-- 更新 -->
<update id="updateStyleInfo" parameterType="StyleCategory" >
update STYLE_CATEGORY set styleName=#{styleName} where styleId=#{styleId}
</update>
<!-- 刪除 -->
<delete id="deleteStyleInfoById" parameterType="int">
delete from STYLE_CATEGORY where styleId =#{styleId}
</delete>
</mapper>
mybatis主配置文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!-- 設置別名 -->
<!-- typeAliases標籤 是寫實體類的別名,寫了之後可以在寫類的映射文件例如<select>標籤中的屬性就可以不用寫實體的具體路徑直接用別名 -->
<typeAliases>
<typeAlias type="com.mybatis.entity.StyleCategory" alias="StyleCategory"/>
</typeAliases>
<!-- 數據庫配置 -->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="url" value="jdbc:oracle:thin:@localhost:1521:orcl"></property>
<property name="driver" value="oracle.jdbc.driver.OracleDriver"></property>
<property name="username" value="lyx"></property>
<property name="password" value="lyx"></property>
</dataSource>
</environment>
</environments>
<!-- 映射文件 -->
<mappers>
<mapper resource="mapper/styleMapper.xml"/>
</mappers>
</configuration>
測試類
package test;
import java.io.IOException;
import java.io.Reader;
import java.util.List;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import com.mybatis.entity.StyleCategory;
public class MainTest {
public static void main(String[] args) throws IOException
{
//讀取配置文件
Reader reader =Resources.getResourceAsReader("mybatis-config.xml");
SqlSessionFactory sqlSession =new SqlSessionFactoryBuilder().build(reader);
//打開session會話
SqlSession session = sqlSession.openSession();
//查詢
StyleCategory style = session.selectOne("com.mybatis.entity.StyleMapper.getStyleById",2);
System.out.println("style:"+style.getStyleId()+","+style.getStyleName());
//刪除
int deleteNum=session.delete("com.mybatis.entity.StyleMapper.deleteStyleInfoById",22);
if(deleteNum>0)
{
System.out.println( deleteNum +"刪除成功!");
}
//更新
StyleCategory updateStyle = new StyleCategory(2,"劉育新");
int updateNum=session.update("com.mybatis.entity.StyleMapper.updateStyleInfo",updateStyle);
if(updateNum>0)
{
System.out.println( updateNum +"更新成功!");
}
//插入數據
StyleCategory insertStyle = new StyleCategory("大中華");
int insertNum =session.insert("com.mybatis.entity.StyleMapper.addStyleInfo",insertStyle);
if(insertNum>0)
{
System.out.println(insertNum+"插入成功");
}
//查詢全部
List<StyleCategory> list=session.selectList("com.mybatis.entity.StyleMapper.queryAllInfo");
for (StyleCategory styleCategory : list) {
System.out.println(styleCategory.getStyleId()+":"+styleCategory.getStyleName());
}
//提交session會話,否則操作數據庫無效
session.commit();
}
}