本例在使用MyBatis Generator工具操作MySQL數(shù)據(jù)庫示例基礎(chǔ)上操作。
1.新建GetSqlSessionFactory.java類,完整代碼如下:
package dbtools;
import java.io.IOException;
import java.io.InputStream;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
public class GetSqlSessionFactory {
private static SqlSessionFactory sqlSessionFactory;
private GetSqlSessionFactory() {
}
synchronized public static SqlSessionFactory getSqlSessionFactory() {
try {
if(sqlSessionFactory==null) {
String resource="mybatis-config.xml";
InputStream inputStream=Resources.getResourceAsStream(resource);
sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream);
}else {
}
}catch (IOException e) {
// TODO: handle exception
e.printStackTrace();
}
return sqlSessionFactory;
}
}
這里使用單例設(shè)計(jì)模式來取得SqlSessionFactory對(duì)象。
2.創(chuàng)建GetSqlSession.java類,核心代碼如下:
package dbtools;
import org.apache.ibatis.session.SqlSession;
public class GetSqlSession {
private static ThreadLocal<SqlSession> tl=new ThreadLocal<SqlSession>();
public static SqlSession getSqlSession() {
SqlSession sqlSession=tl.get();
if (sqlSession==null) {
sqlSession=GetSqlSessionFactory.getSqlSessionFactory().openSession();
tl.set(sqlSession);
}else {
}
System.out.println("獲得的sqlSession對(duì)象的hashCode:"+sqlSession.hashCode());
return sqlSession;
}
public static void commit() {
if(tl.get()!=null) {
tl.get().commit();
tl.get().close();
tl.set(null);
System.out.println("提交了");
}
}
public static void rollback() {
if (tl.get()!=null) {
tl.get().rollback();
tl.get().close();
tl.set(null);
System.out.println("回滾了");
}
}
}
3.創(chuàng)建DBOperate.java類,核心代碼如下:
package dbtools;
import java.util.List;
import java.util.Map;
import org.apache.ibatis.session.SqlSession;
public class DBOperate {
public int insert(String sqlId,Map valueMap) {
//注意這里將sqlSession創(chuàng)建在方法內(nèi)部
SqlSession sqlSession=GetSqlSession.getSqlSession();
return sqlSession.insert(sqlId,valueMap);
}
public int delete(String sqlId,Map valueMap) {
SqlSession sqlSession=GetSqlSession.getSqlSession();
return sqlSession.delete(sqlId,valueMap);
}
public int update(String sqlId,Map valueMap) {
SqlSession sqlSession=GetSqlSession.getSqlSession();
return sqlSession.update(sqlId,valueMap);
}
public List<Map> select(String sqlId,Map valueMap) {
SqlSession sqlSession=GetSqlSession.getSqlSession();
return sqlSession.selectList(sqlId,valueMap);
}
}
所有的CRUD參數(shù)值都用Map對(duì)象進(jìn)行封裝。
4.userinfoMapping.xml映射文件及mybatis-config.xml配置文件,數(shù)據(jù)庫設(shè)計(jì)等參看使用MyBatis Generator工具操作MySQL數(shù)據(jù)庫示例,在userinfoMapping.xml映射文件<mapper>標(biāo)簽中添加如下內(nèi)容:
<insert id="insertUserinfo" parameterType="map" useGeneratedKeys="true" keyProperty="id">
insert into userinfo(username,password,age) values(#{username},#{password},#{age})
</insert>
<select id="getUserinfoById" parameterType="map" resultType="map">
select * from userinfo where id=#{id}
</select>
<delete id="deleteUserinfoById" parameterType="map">
delete from userinfo where id=#{id}
</delete>
<select id="getAllUserinfo" resultType="map">
select * from userinfo
</select>
<update id="updateUserinfoById" parameterType="map">
update userinfo set username=#{username},password=#{password},age=#{age} where id=#{id}
</update>
6.修改Test.java文件進(jìn)行測(cè)試
package test;
import java.util.HashMap;
import dbtools.DBOperate;
import dbtools.GetSqlSession;
public class Test {
public static void main(String[] args) {
try {
HashMap valueMap1=new HashMap();
valueMap1.put("username", "張三");
valueMap1.put("password","123456");
valueMap1.put("age", 100);
HashMap valueMap2=new HashMap();
valueMap2.put("username", "張三");
valueMap2.put("password","123456");
valueMap2.put("age", 100);
DBOperate dbo=new DBOperate();
dbo.insert("insertUserinfo", valueMap1);
dbo.insert("insertUserinfo", valueMap2);
} catch (Exception e) {
e.printStackTrace();
GetSqlSession.rollback();
} finally {
GetSqlSession.commit();
}
}
}
Output:
獲得的sqlSession對(duì)象的hashCode:1684106402
獲得的sqlSession對(duì)象的hashCode:1684106402
提交了
此時(shí)可以看到數(shù)據(jù)庫中多了兩條數(shù)據(jù)。