* 使用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层自动实现接口的更多相关文章

  1. idea 中dao层自动生成接口

    1.在生成接口的类上右键 2.选中要生成的接口方法 3.点击Yes 4.出现(? reference in ? file)即生成成功

  2. [MyBatis]DAO层只写接口,不用写实现类

    团队开发一个项目,由老大架了一个框架,遇到了DAO层不用写接口了,我也是用了2次才记住这个事的,因为自己一直都是习惯于写DAO层的实现类,所以,习惯性的还是写了个实现类.于是遇到错误了. 找不到那个方 ...

  3. Mybatis的dao层实现 接口代理方式实现规范+plugins-PageHelper

    Mybatis的dao层实现 接口代理方式实现规范 Mapper接口实现时的相关规范: Mapper接口开发只需要程序员编写Mapper接口而不用具体实现其代码(相当于我们写的Imp实现类) Mapp ...

  4. 基于Mybatis的Dao层的开发

    基于Mybatis的Dao层开发 SqlSessionFactoryBuilder用于创建SqlSessionFacoty,SqlSessionFacoty一旦创建完成就不需要SqlSessionFa ...

  5. MyBatis开发Dao层的两种方式(原始Dao层开发)

    本文将介绍使用框架mybatis开发原始Dao层来对一个对数据库进行增删改查的案例. Mapper动态代理开发Dao层请阅读我的下一篇博客:MyBatis开发Dao层的两种方式(Mapper动态代理方 ...

  6. MyBatis开发Dao层的两种方式(Mapper动态代理方式)

    MyBatis开发原始Dao层请阅读我的上一篇博客:MyBatis开发Dao层的两种方式(原始Dao层开发) 接上一篇博客继续介绍MyBatis开发Dao层的第二种方式:Mapper动态代理方式 Ma ...

  7. 基于Mybatis的Dao层开发

    转自:https://www.cnblogs.com/rodge-run/p/6528398.html 基于Mybatis的Dao层开发 SqlSessionFactoryBuilder用于创建 Sq ...

  8. Mybatis的Dao层实现原理

    1.Mybatis的Dao层实现 1.1 传统开发方式 1.1.1编写UserDao接口 public interface UserDao { List<User> findAll() t ...

  9. IDEA项目搭建四——使用Mybatis实现Dao层

    一.引入mybatis及mysql的jar包 可以从阿里云上面查找版本,db操作放在dao层所以打开该层的pom.xml文件,找到<dependencies>节点增加两个引入 <de ...

随机推荐

  1. IntelliJ IDEA 2018.3发布

    本文转自:https://www.linuxprobe.com/intellij-idea-2018-3-java-12.html

  2. php实现远程网络文件下载到服务器指定目录(方法二)

    <?php // maximum execution time in seconds set_time_limit (24 * 60 * 60); //if (!isset($_POST['su ...

  3. 微服务 Rpc和Rest协议

    原文:https://blog.csdn.net/king866/article/details/54174665 接口调用通常包含两个部分,序列化和通信协议.常见的序列化协议包括json.xml.h ...

  4. .net 设置Webbowser 版本

    .net 里的Webbowser控件默认情况是用IE7来渲染 可修改注册表试用是最新的版本来渲染: using System; using System.Collections.Generic; us ...

  5. 【Qt】QLabel之动态阴影边框

    效果如下: 实现思路参考了下面的文章: Qt 之 QPropertyAnimation 该文章是自定义属性alpha,原理类似,代码如下: //在头文件加入 Q_PROPERTY(int iBorde ...

  6. libgdx学习记录18——Box2d物理引擎

    libgdx封装了Box2D物理引擎,通过这个引擎能够模拟物理现实,使设计出的游戏更具有真实感. libgdx中,Box2d程序的大概过程: 1. 创建物理世界world,并设置重力加速度. 2. 创 ...

  7. Centos7下vim的table键修改为4个空格

    1.要有root用户权限 2.已经安装vim 3.编辑/etc/vim/vimrc 文件,添加set ts=4 vim /etc/vimrc #按大写G到最后一行,添加set ts= set ts = ...

  8. [LOJ#6033]. 「雅礼集训 2017 Day2」棋盘游戏[二分图博弈、匈牙利算法]

    题意 题目链接 分析 二分图博弈经典模型,首先将棋盘二分图染色. 考虑在某个最大匹配中: 如果存在完美匹配则先手必败,因为先手选定的任何一个起点都在完美匹配中,而后手则只需要走这个点的匹配点,然后先手 ...

  9. 最简单的XML用法

    在传递数据时,XML和JSON是最常用的数据格式,SQL Server从很早的版本就开始支持XML格式,而对于JSON格式,SQL Server从2016版本开始支持.大多数数据库系统并没有升级到SQ ...

  10. vuex实践之路——笔记本应用(一)

    首先使用vue-cli把环境搭建好. 介绍一下应用的界面. App.vue根组件,就是整个应用的最外层 Toolbar.vue:最左边红色的区域,包括三个按钮,添加.收藏.删除. NoteList.v ...