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 ...
随机推荐
- leetcode88—Merge Sorted Array
Given two sorted integer arrays nums1 and nums2, merge nums2 into nums1 as one sorted array. Note: T ...
- ssh访问服务器端visdom
在服务器端启动visdompython -m visdom.server在windows端,将服务器的8097端口重定向到windows端(做了映射绑定):ssh -L 8097:127.0.0.1: ...
- JS设置cookie、读取cookie、删除cookie(转载)
JavaScript是运行在客户端的脚本,因此一般是不能够设置Session的,因为Session是运行在服务器端的.而cookie是运行在客户端的,所以可以用JS来设置cookie.假设有这样一种情 ...
- 20155308『网络对抗技术』Exp5 MSF基础应用
20155308『网络对抗技术』Exp5 MSF基础应用 一.原理与实践说明 实践内容 本实践目标是掌握metasploit的基本应用方式,重点常用的三种攻击方式的思路.具体需要完成: 一个主动攻击实 ...
- 20155320 Exp3 免杀原理与实践
20155320 Exp3 免杀原理与实践 免杀 一般是对恶意软件做处理,让它不被杀毒软件所检测.也是渗透测试中需要使用到的技术. [基础问题回答] (1)杀软是如何检测出恶意代码的? 1.通过行为检 ...
- 2017-2018-1 20155320 嵌入式C语言——时钟
2017-2018-1 20155320 嵌入式C语言--时钟 要求: 在作业本上完成附图作业,要认真看题目要求. 提交作业截图 作弊本学期成绩清零(有雷同的,不管是给别人传答案,还是找别人要答案都清 ...
- 20155321 《网络攻防》 Exp7 网络欺诈防范
20155321 <网络攻防> Exp7 网络欺诈防范 实验内容 简单应用SET工具建立冒名网站 因为钓鱼网站是在本机的http服务下使用,因此需要将SET工具的访问端口改为http默认的 ...
- 全虚拟化和半虚拟化的区别 cpu的ring0 ring1又是什么概念? - 转
http://www.cnblogs.com/xusongwei/archive/2012/07/30/2615592.html ring0是指CPU的运行级别,ring0是最高级别,ring1次之, ...
- Jlink使用技巧系列教程索引
近两个月,写写停停,总算完成了这个系列的教程,不容易啊! Jlink使用技巧系列文章: 以下是各文章的链接,直接点击即可进入阅读. Jlink使用技巧之合并烧写文件 Jlink使用技巧之烧写SPI F ...
- python中获取执行脚本路径方法
1.sys.path[0]:获取执行脚本目录绝对路径 #每次执行脚本时,python会将执行脚本目录加入PYTHONPATH环境变量中(sys.path获取) #!/usr/bin/python3 i ...