mybatis之DAO层自动实现接口
* 使用mybatis举例,使用DAO接口方式实现
* 不需要针对接口去编写具体的实现类代码,编写映射XML文件,直接拿来使用即可。
* 1、导入jar包:mybatis和mysql-connector
* 2、mybatis配置文件:mybatis-config.xml,加载映射XML文件
* 3、编写JavaBean类,如UserBean
* 4、编写DAO接口和映射XML文件(namespace=DAO接口文件路径、id=接口方法名) mybatis-config-dao.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>
<!--从外部配置文件导入jdbc信息-->
<properties resource="jdbc.properties"></properties> <environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments> <!--指定映射资源文件-->
<mappers>
<mapper resource="dao/DaoMapper.xml"/> </mappers>
</configuration>
DaoMapper.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="dao.UserDao">
<!--id:名称; parameterType传入参数类型; resultType:返回数据类型-->
<select id="selectOneUser" parameterType="int" resultType="bean.User">
select * from user where id = #{id}
</select> <!--批量查询-->
<select id="selectAllUser" resultMap="userList">
select * from user
</select>
<resultMap type="bean.User" id="userList">
<result property="id" column="id"/>
<result property="name" column="name"/>
<result property="age" column="age"/>
</resultMap> <insert id="insertUser" useGeneratedKeys="true" keyProperty="id">
insert into user (id, name, age) values (#{id} ,#{name}, #{age})
</insert> <update id="updateUser">
update user set name=#{name},age=#{age} where id=#{id}
</update> <delete id="deleteUser">
delete from user where id=#{id}
</delete> <!-- 传入多个参数时,自动转换为map形式 -->
<insert id="insertByColumns" useGeneratedKeys="true" keyProperty="id">
insert into user (id, name, age) values (NULL ,#{param1}, #{param2})
</insert>
<insert id="insertByZhuJie" useGeneratedKeys="true" keyProperty="id">
insert into user (id, name, age) values (NULL ,#{name}, #{age})
</insert>
<insert id="insertByMap" useGeneratedKeys="true" keyProperty="id">
insert into user (id, name, age) values (NULL ,#{name}, #{age})
</insert> </mapper>
UserDao.java
package dao; import bean.User;
import org.apache.ibatis.annotations.Param; import java.util.List;
import java.util.Map; /*
* 使用mybatis举例,使用DAO接口方式实现
* 不需要针对UserMapperI接口去编写具体的实现类代码,这个具体的实现类由MyBatis帮我们动态构建出来,我们只需要直接拿来使用即可。
* */
public interface UserDao { // 根据id查询单一数据
public User selectOneUser(int id); // 查询所有用户
public List<User> selectAllUser(); // 插入数据
public int insertUser(User user); // 修改用户
public int updateUser(User user); // 删除用户
public int deleteUser(User user); // 插入数据;多参数三种方式:默认Map、使用Map传参和使用注解别名
public int insertByColumns(String name, int age);
public int insertByZhuJie(@Param("name") String name, @Param("age") int age);
public int insertByMap(Map map); }
TestDao.java
package dao; import bean.User;
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.junit.After;
import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test; import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.List;
import java.util.Map; /*
* 使用mybatis举例,使用DAO接口方式实现
* 不需要针对接口去编写具体的实现类代码,编写映射XML文件,直接拿来使用即可。
* 1、导入jar包:mybatis和mysql-connector
* 2、mybatis配置文件:mybatis-config.xml,加载映射XML文件
* 3、编写JavaBean类,如UserBean
* 4、编写DAO接口和映射XML文件(namespace=DAO接口文件路径、id=接口方法名)
* */
public class TestDao {
String resource = "mybatis-config-dao.xml";
SqlSessionFactory sqlSessionFactory = null;
SqlSession session = null; @Before
public void before() {
// System.out.println("Before");
try {
InputStream inputStream = Resources.getResourceAsStream(resource);
// 创建工厂
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
// 创建session对象
session = sqlSessionFactory.openSession(); } catch (IOException e) {
e.printStackTrace();
}
} @After
public void close() {
session.close();
// System.out.println("After");
} @Test
public void testSelectOneUser() {
// 接口自动实例化
UserDao userDao = session.getMapper(UserDao.class);
// 执行sql
User user = userDao.selectOneUser(1);
System.out.println(user);
} // 批量查询
@Test
public void testSelectAllUser() {
// 接口自动实例化
UserDao userDao = session.getMapper(UserDao.class);
// 执行sql
List<User> listUser = userDao.selectAllUser();
System.out.println("记录个数:" + listUser.size());
System.out.println(listUser);
} // 插入数据
@Ignore
@Test
public void testInsertUser() {
UserDao userDao = session.getMapper(UserDao.class);
User user = new User("AA", "29");
int n = userDao.insertUser(user);
session.commit();
System.out.println("插入数据:" + user);
System.out.println(n);
} // 修改数据
@Ignore
@Test
public void testUpdateUser() {
UserDao userDao = session.getMapper(UserDao.class);
User user = new User(2, "Tom5", "29");
int n = userDao.updateUser(user);
session.commit();
System.out.println("修改数据:" + user);
System.out.println(n);
} // 修改数据
@Ignore
@Test
public void testDeleteUser() {
UserDao userDao = session.getMapper(UserDao.class);
User user = new User(13, "XX", "XX");
int n = userDao.deleteUser(user);
session.commit();
System.out.println("删除数据:" + user);
System.out.println(n);
} // 多参数插入数据的三种方式
@Ignore
@Test
public void testInsertByColumns() {
UserDao userDao = session.getMapper(UserDao.class);
String name = "insertByColumns";
int age = 33;
// int n = userDao.insertByColumns(name, age);
// int n = userDao.insertByZhuJie(name, age); Map map = new HashMap();
map.put("name", name);
map.put("age", age);
int n = userDao.insertByMap(map); session.commit();
System.out.println("插入数据name:" + name);
System.out.println(n);
} }
User.java
package bean; /**
* 数据封装类
* JavaBean
*/
public class User {
private int id;
private String name;
private String age; public User() { } public User(String name, String age) {
this.name = name;
this.age = age;
}
public User(int id, String name, String age) {
this.id = id;
this.name = name;
this.age = age;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public String getAge() {
return age;
} public void setAge(String age) {
this.age = age;
} public int getId() {
return id;
} public void setId(int id) {
this.id = id;
} @Override
public String toString() {
return "User{id:" + id + "; 姓名:" + name + "; 年龄:" + age + "}";
}
}
mybatis之DAO层自动实现接口的更多相关文章
- idea 中dao层自动生成接口
1.在生成接口的类上右键 2.选中要生成的接口方法 3.点击Yes 4.出现(? reference in ? file)即生成成功
- [MyBatis]DAO层只写接口,不用写实现类
团队开发一个项目,由老大架了一个框架,遇到了DAO层不用写接口了,我也是用了2次才记住这个事的,因为自己一直都是习惯于写DAO层的实现类,所以,习惯性的还是写了个实现类.于是遇到错误了. 找不到那个方 ...
- Mybatis的dao层实现 接口代理方式实现规范+plugins-PageHelper
Mybatis的dao层实现 接口代理方式实现规范 Mapper接口实现时的相关规范: Mapper接口开发只需要程序员编写Mapper接口而不用具体实现其代码(相当于我们写的Imp实现类) Mapp ...
- 基于Mybatis的Dao层的开发
基于Mybatis的Dao层开发 SqlSessionFactoryBuilder用于创建SqlSessionFacoty,SqlSessionFacoty一旦创建完成就不需要SqlSessionFa ...
- MyBatis开发Dao层的两种方式(原始Dao层开发)
本文将介绍使用框架mybatis开发原始Dao层来对一个对数据库进行增删改查的案例. Mapper动态代理开发Dao层请阅读我的下一篇博客:MyBatis开发Dao层的两种方式(Mapper动态代理方 ...
- MyBatis开发Dao层的两种方式(Mapper动态代理方式)
MyBatis开发原始Dao层请阅读我的上一篇博客:MyBatis开发Dao层的两种方式(原始Dao层开发) 接上一篇博客继续介绍MyBatis开发Dao层的第二种方式:Mapper动态代理方式 Ma ...
- 基于Mybatis的Dao层开发
转自:https://www.cnblogs.com/rodge-run/p/6528398.html 基于Mybatis的Dao层开发 SqlSessionFactoryBuilder用于创建 Sq ...
- Mybatis的Dao层实现原理
1.Mybatis的Dao层实现 1.1 传统开发方式 1.1.1编写UserDao接口 public interface UserDao { List<User> findAll() t ...
- IDEA项目搭建四——使用Mybatis实现Dao层
一.引入mybatis及mysql的jar包 可以从阿里云上面查找版本,db操作放在dao层所以打开该层的pom.xml文件,找到<dependencies>节点增加两个引入 <de ...
随机推荐
- ICC2 常用命令
1. 关于 data preparation : report_ref_libs : report reference library report_lib lib_aa : report the ...
- RPC使用rabbitmq实现
两天时间重写公司架构在本地实现测试学习 双向连接客户端和服务端配置: 连接rabbitmq服务器 定义消息队列 配置发送请求的模板:交换机.消息队列. 配置监听处理:监听的队列.消息转换处理 配置处理 ...
- Flask 入门一( flask 框架和 flask-script 库)
Flask 入门一( flask 框架 和 flask-script 库) 一.Flask框架: 1.简介 Flask是一个非常小的Python Web框架,被称为微型框架:只提供了一个稳健的核心,其 ...
- visual studio 插件
一:VS10x Code Map(打开后台cs文件,插件列出了所有的字段.方法,方便当代码行多的时候查找,提升工作效率) 1:下载 https://marketplace.visualstudio.c ...
- #HTTP协议学习# (一)request 和response 解析
注:本文转自:http://www.cnblogs.com/TankXiao/archive/2012/02/13/2342672.html , 粉字[]内内容为个人笔记 当今web程序的开发技术真是 ...
- Advanced Javascript outlining插件说明
Advanced Javascript outlining插件 用途:在js文件中写入#region/#endregion代码组合段,可收缩和展开.类似于后台页面的region用法. 效果截图如下(前 ...
- jquery操作checked
jquery操作checkbox,如何获取勾选状态?如何使得勾选?如何取消勾选? 来段代码就知道了: <html> <head> <meta charset=" ...
- LED驱动电源
LED驱动电源 LED驱动电源,你了解多少? LED驱动电源是把电源供应转换为特定的电压电流以驱动LED发光的电压转换器,通常情况下:LED驱动电源的输入包括高压工频交流(即市电).低压直 ...
- 20155331 丹增旦达 网络攻防 Exp2后门原理与实践
20155331 丹增旦达<网络攻防>Exp2后门原理与实践 实验内容 (1)使用netcat获取主机操作Shell,cron启动 (2)使用socat获取主机操作Shell, 任务计划启 ...
- mfc 线程的优先级
知识点: 线程优先级 获取当前线程句柄 线程优先级设置 线程优先级变动 线程优先级获取 一.线程优先级(Thread priority ) 简单的说就是(线程)的优先级越高,那么就 ...