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 ...
随机推荐
- Android 使用正则表达式验证身份证号是否符合规则
我国当前的身份证号分为三种: 一.15位身份证号 二.18位身份证号(前17位位数字,最后一位为字母x) 三.18为身份证号(18位都是数字) 具体验证请参考下面代码: /** * 验证身份证号是否符 ...
- 运放参数的详细解释和分析-part3,输入失调电压Vos及温漂
运放参数的详细解释和分析-part3,输入失调电压Vos及温漂 在运放的应用中,不可避免的会碰到运放的输入失调电压Vos问题,尤其对直流信号进行放大时,由于输入失调电压Vos的存在,放大电路的输出端总 ...
- Ruby知识总结-一般变量+操作符+if+数组和哈希
ruby入门掌握其实很简单,下面对我司主要使用的部分入门做一个简单的归纳总结: 本文的文章结构: 1.变量 2.操作符 3.if~else~end .unless 4.数组(Array) 5.哈希(H ...
- 大数据入门第十四天——Hbase详解(一)入门与安装配置
一.概述 1.什么是Hbase 根据官网:https://hbase.apache.org/ Apache HBase™ is the Hadoop database, a distributed, ...
- jQuery.bsgrid
http://thebestofyouth.com/bsgrid/ 支持json.xml数据格式,皮肤丰富并且容易定制,支持表格编辑.本地数据.导出参数构建等实用便捷的功能,容易扩展,更拥有丰富的示例 ...
- 20155327 李百乾 Exp7 网络欺诈防范
20155327 李百乾 Exp7 网络欺诈防范 基础问题回答 (1)通常在什么场景下容易受到DNS spoof攻击 就此次试验来看,被收到NDSspoof攻击,首先要被攻击机扫描,并被设置为目标,所 ...
- 20155333 《网络对抗》 Exp9 Web安全基础
20155333 <网络对抗> Exp9 Web安全基础 基础问题回答 1.SQL注入攻击原理,如何防御? 原理: 通过在用户名.密码登输入框中输入一些',--,#等特殊字符,实现引号闭合 ...
- 连接到win2003的远程桌面,客户端要如何操作
第一步:命令行执行mstsc 第二步:处输入开启了远程桌面功能的计算机IP地址.
- 浅析arm的异常、中断和arm工作模式的联系
说到异常向量,会让人联想到中断向量.其实,中断是属于异常的子集的,也就是说中断其实是异常其中的一种. 回到异常向量,他其实是一张表格,每个格子里存放的是一个地址,或者是一个跳转命令,不管是哪个,其目的 ...
- TMS320VC5509驱动LCD1602之奇怪问题和时序图
1. 最近调试自己板子上LCD1602的时候,看下测试的时序图,因为下面的时序图导致LCD1602无法显示,下面的时序图是有问题的,E的上升沿和下降沿的时候,RW需要低电平 对比下淘宝上买的可以显示的 ...