先看下一個簡單Mybatis的項目結構:Mybatis主要對應的是dao層。
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsICM38FdsYkRGZkRG9lcvx2bjxiNx8VZ6l2cs0TPR1kMVRUT5VkaNBDOsJGcohVYsR2MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnL3cDNxETO1YTMwMzNwkTMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
第一步:導包
先導包,把上面圖檔的lib裡面的jar包下載下傳。其中log開頭的jar包是一個日志jar包,與org.zhuao.utils裡的log4j.properties比對,兩者可以舍去。
第二步:配置檔案
這個項目連接配接的是oracle資料庫
第三步:寫一個MyBatisUtils方法類,調用配置檔案
public class MyBatisUtils {
/**
* 定義工廠
*/
private static SqlSessionFactory sf;
static {
String conf="SqlMapConfig.xml";
try {
Reader reader = Resources.getResourceAsReader(conf);
SqlSessionFactoryBuilder sfb=new SqlSessionFactoryBuilder();
sf=sfb.build(reader);
}catch (IOException e) {
// TODO: handle exception
e.printStackTrace();
}
}
/**
* 擷取連接配接,連接配接session
* @return
*/
public static SqlSession getSession() {
return sf.openSession();
}
public static void main(String[] args) {
SqlSession session=MyBatisUtils.getSession();
System.out.println(session);
session.close();
}
}
ps: 記得寫一個User類
public class Users {
private Integer userId;
private String userName;
private String password;
private String age;
private Date time;
public Users() {
super();
// TODO Auto-generated constructor stub
}
public Users(Integer userId, String userName, String password, String age, Date time) {
super();
this.userId = userId;
this.userName = userName;
this.password = password;
this.age = age;
this.time = time;
}
@Override
public String toString() {
StringBuilder builder = new StringBuilder();
builder.append("Users [userId=");
builder.append(userId);
builder.append(", userName=");
builder.append(userName);
builder.append(", password=");
builder.append(password);
builder.append(", age=");
builder.append(age);
builder.append(", time=");
builder.append(time);
builder.append("]");
return builder.toString();
}
public Integer getUserId() {
return userId;
}
public void setUserId(Integer userId) {
this.userId = userId;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
public Date getTime() {
return time;
}
public void setTime(Date time) {
this.time = time;
}
第四步:寫UserMapper.java
public interface UserMapper {
Integer add(Users us);
Integer change(@Param("id")Integer id,@Param("name")String name);
Integer del(@Param("id")Integer id);
Integer delByIds( @Param("ids") List<Integer> ids);
Users getById(@Param("id")Integer id);
List<Users> getAll();
List<Users> getByLimit(RowBounds rb );
List<Users> getByWhere(@Param("name") String name,@Param("age") Integer age);
}
第五步:寫對應的UserMapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//ibatis.apache.org//DTD Mapper 3.0//EN"
"http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd">
<mapper namespace="org.zhuao.dao.UserMapper">
<sql id="whereById">
WHERE "USERID"=#{id}
</sql>
<insert id="add" parameterType="org.zhuao.model.Users" >
INSERT INTO "T_USERS" ("USERID","USERNAME","PASSWORD","AGE","TIME") VALUES (#{userId},#{userName},#{password},#{age},#{time})
</insert>
<update id="change">
UPDATE "T_USERS" SET "USERNAME" =#{name} <include refid="whereById" />
</update>
<delete id="del">
DELETE FROM "T_USERS" <include refid="whereById" />
</delete>
<select id="getById" resultMap="kfcResultMap">
SELECT * FROM "T_USERS" WHERE "USERID"=#{id}
</select>
<select id="getAll" resultType="org.zhuao.model.Users">
SELECT * FROM "T_USERS"
</select>
<select id="getByLimit" resultType="org.zhuao.model.Users">
SELECT * FROM "T_USERS"
</select>
<select id="getByWhere" resultType="org.zhuao.model.Users">
SELECT * FROM "T_USERS"
<where>
<if test="name != null and name !=''">
AND "USERNAME" like CONCAT(CONCAT('%', #{name} ),'%')
</if>
<if test="age != null">
AND "AGE" < #{age}
</if>
</where>
</select>
<delete id="delByIds">
DELETE FROM "T_USERS" WHERE "USERID" IN
<foreach collection="ids" item="id" separator="," close=")" open="(">
#{id}
</foreach>
</delete>
<resultMap type="org.zhuao.model.Users" id="kfcResultMap">
<result property="userId" column="USERID"/>
<result property="userName" column="USERNAME"/>
</resultMap>
</mapper>
第六步:看一下在Main類怎麼調用這個UserMapper.xml檔案
public static void main(String[] args) {
// add();
// change();
// del();
// getById();
// getByLimit();
// getAll();
//getByWhere();
delByIds();
}
private static void delByIds() {
SqlSession session =MyBatisUtils.getSession();
UserMapper mapper=session.getMapper(UserMapper.class);
List<Integer> ids=new ArrayList<Integer>();
ids.add(1);
ids.add(2);
Integer del=mapper.delByIds(ids);
if(del>0) {
session.commit();
}else {
session.rollback();
}
session.close();
}
private static void getByWhere() {
SqlSession session =MyBatisUtils.getSession();
UserMapper mapper=session.getMapper(UserMapper.class);
List<Users> byWhere = mapper.getByWhere("谷", 45);
for(Users users : byWhere) {
System.out.println(users.toString());
}
session.close();
}
這樣就可以基本實作了Mybatis架構的實作。
順便上傳這個Mybatis架構的簡單demo,以供參考。https://download.csdn.net/download/weixin_42120561/11456382
----------------------------------------------------------------------------------------------------------------------------------------------------
如果是想放在web項目裡面實作,那麼Main類中的static方法對應在service.impl層。再被其他地方調用。
舉例:
public interface AddFileService {
Integer add(Files f);
}
public class AddFileServiceImpl implements AddFileService {
@Override
public Integer add(Files f) {
SqlSession session =MyBatisUtils.getSession();
FileMapper mapper=session.getMapper(FileMapper.class);
Integer insert=mapper.add(f);
if(insert>0) {
session.commit();
}else {
session.rollback();
}
session.close();
return insert;
}
}