先看下一个简单Mybatis的项目结构:Mybatis主要对应的是dao层。
第一步:导包
先导包,把上面图片的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;
}
}