您的位置:首页 > 移动开发

mybatis CRUD之Mapper代理开发模式(接口实现 不需要实现类)

2018-03-11 15:16 656 查看

mybatis CRUD之Mapper代理开发模式(接口实现 不需要实现类)

mybatis中文文档点这里

环境配置:

1.0 mysql数据库驱动包

2.0 mybatis 3.4.5jar包

3.0 jdk7.0以上

开发工具:eclipse

navicat

mysql5.7

1.0 建表 表名t 结构如下



2.0 创建javaBean 模型 对应数据库表

package com.ccut.DAO;

public class T {
private int id;
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}

}


3.0 mybatis 配置文件 Configuration.xml 内容如下

<?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>
<!-- JAVA类对应的别名 -->
<typeAlias alias="T" type="com.ccut.DAO.T"/>
</typeAliases>

<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POO
feb5
LED">
<!-- //设置驱动 -->
<property name="driver" value="com.mysql.jdbc.Driver"/>
<!-- //链接 -->
<property name="url" value="jdbc:mysql://localhost:3306/xyd" />
<!--   //用户名 -->
<property name="username" value="root"/>
<!-- //密码 -->
<property name="password" value="xuyandong"/>
</dataSource>
</environment>
</environments>

<mappers>
<!-- //映射文件地址 -->
<mapper resource="com/ccut/database/User.xml"/>
</mappers>
</configuration>


4.0 mybatis 映射文件 User.xml

<?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.ccut.database.Mybatis_CRUD">
<!-- 按id查询 -->
<select id="selectTByID" parameterType="String" resultType="T">
select * from t where name = #{name}
</select>
<!-- 插入 -->
<insert id="insertTByID" parameterType="T">
insert into t(id,name) values(#{id},#{name})
</insert>
<!-- 修改 -->
<update id="updateTByID" parameterType="T">
update t set name = #{name} where id=#{id}
</update>
<!-- 删除 -->
<delete id="deleteTByID" parameterType="int">
delete from t where id = #{id}
</delete>

</mapper>


注意  mapper namespace="com.ccut.database.Mybatis_CRUD" 中namespace的值要与下面的接口路径一致


5.0 创建Mapper 接口 Mybatis_CRUD.java

规范 :

mapper接口的全限定名要和mapper映射文件的namespace的值相同。

mapper接口的方法名称要和mapper映射文件中的statement的id相同。

mapper接口的方法参数只能有一个,且类型要和mapper映射文件中statement的parameterType的值保持一致。

mapper接口的返回值类型要和mapper映射文件中statement的resultType值或resultMap中的type值保持一致。

package com.ccut.database;

import java.util.List;

import org.apache.ibatis.session.SqlSession;

import com.ccut.DAO.T;

public interface Mybatis_CRUD {

public void deleteTByID(int id);
public void updateTByID(T t);
public void insertTByID(T t);
public List<T> selectTByID(String name);

}


函数名要与4.0中的id值一样


6.0 编写 mybatis 工具类 MybatisUtil .java

package com.ccut.mybatisUtil;

import java.io.IOException;
import java.io.Reader;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

public class MybatisUtil {
private static Reader reader;
private static SqlSessionFactory factory;
private static String cfg = "Configuration.xml";
private static void setSqlSessionFactory(){
try {
//读取配置文件
reader = Resources.getResourceAsReader(cfg);
factory = new SqlSessionFactoryBuilder().build(reader);
} catch (IOException e) {
// TODO Auto-generated catch block
System.out.println("找不到文件!");
e.printStackTrace();
}
}

public static SqlSession getSession(boolean yes){
setSqlSessionFactory();
return factory.openSession(yes);
}
}


工程目录结构:



7.0 编写测试类 Main.java 测试删除

删除前:



运行下面测试类:

package com.ccut.test;

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 org.springframework.beans.factory.annotation.Autowired;

import com.ccut.DAO.T;
import com.ccut.database.Mybatis_CRUD;
import com.ccut.mybatisUtil.MybatisUtil;

public class Main {
public static void main(String[] args) {
SqlSession session = MybatisUtil.getSession(true);
Mybatis_CRUD mapper = session.getMapper(Mybatis_CRUD.class);
mapper.deleteTByID(1);
session.close();
}
}


查询数据库表的变化:



可知 id= 1 的记录已经被删除

接着上面的表记录,下面我们增加一条记录:只需要把上面的Main.java 改为如下:

package com.ccut.test;

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 org.springframework.beans.factory.annotation.Autowired;

import com.ccut.DAO.T;
import com.ccut.database.Mybatis_CRUD;
import com.ccut.mybatisUtil.MybatisUtil;

public class Main {
public static void main(String[] args) {
SqlSession session = MybatisUtil.getSession(true);
Mybatis_CRUD mapper = session.getMapper(Mybatis_CRUD.class);
//mapper.deleteTByID(1);
T t =  new T();
t.setId(1);
t.setName("xyda");
mapper.insertTByID(t);
session.close();
}
}


结果如下:



由此可知数据库记录添加成功 测试通过

接下来测试修改 数据库表还用上面执行过插入记录 接下来我们把 id= 1处的name = xyda 改为 name= xyd

接着改Main.java

package com.ccut.test;

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 org.springframework.beans.factory.annotation.Autowired;

import com.ccut.DAO.T;
import com.ccut.database.Mybatis_CRUD;
import com.ccut.mybatisUtil.MybatisUtil;

public class Main {
public static void main(String[] args) {
SqlSession session = MybatisUtil.getSession(true);
Mybatis_CRUD mapper = session.getMapper(Mybatis_CRUD.class);
//mapper.deleteTByID(1);
T t =  new T();
//          t.setId(1);
//          t.setName("xyda");
//          mapper.insertTByID(t);
t.setId(1);
t.setName("xyd");
mapper.updateTByID(t);
session.close();
}
}


执行后的数据库表结构(懒得截图直接用前面的图片 )



修改成功!

接下来测试查询 ,由映射文件可知查询是按名字查询的 所以会出现两条记录 所以用List 代码如下:

package com.ccut.test;

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 org.springframework.beans.factory.annotation.Autowired;

import com.ccut.DAO.T;
import com.ccut.database.Mybatis_CRUD;
import com.ccut.mybatisUtil.MybatisUtil;

public class Main {
public static void main(String[] args) {
SqlSession session = MybatisUtil.getSession(true);
Mybatis_CRUD mapper = session.getMapper(Mybatis_CRUD.class);
//mapper.deleteTByID(1);
T t =  new T();
//          t.setId(1);
//          t.setName("xyda");
//          mapper.insertTByID(t);
//          t.setId(1);
//          t.setName("xyd");
//          mapper.updateTByID(t);
List<T> a = mapper.selectTByID("xyd");
for(T v:a){
System.out.println(v.getId()+"-----"+v.getName());
}

session.close();
}
}


结果:



同上面数据库表中的数据一样 所以也ok!

完整项目地址
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: