Mybatis(3)dao层开发

以实现类完成CRUD操作

1、持久层dao层接口的书写

src\main\java\dao\IUserDao.java

package dao;

import domain.QueryVo;
import domain.User; import java.util.List; public interface IUserDao {
/**
* 查询所有数据
* @return
*/
List<User> findAll();
//List<User> findAll(); /**
* 添加用户
* @param user
*/
void addUser(User user); /**
* 更新用户
* @param user
*/
void updateUser(User user); /**
* 删除用户
* @param id
*/
void deleteUser(int id); /**
* 根据id查询用户
* @param id
*/
User findById(int id); /**
* 模糊查询用户信息
* @return
*/
List<User> findByName(String str); /**
* 使用聚合函数查询
*/
int findTotal();
}

2、持久层实现类的书写

src\main\java\dao\impl\UserDaoImpl.java

package dao.impl;

import dao.IUserDao;
import domain.QueryVo;
import domain.User;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory; import java.util.List; public class UserDaoImpl implements IUserDao {
private SqlSessionFactory factory; public UserDaoImpl() {
} public UserDaoImpl(SqlSessionFactory factory) {
this.factory = factory;
} public List<User> findAll() {
SqlSession session = factory.openSession();
List<User> list = session.selectList("dao.IUserDao.findAll");
session.close();
return list;
} public void addUser(User user) {
SqlSession session = factory.openSession();
int i = session.insert("dao.IUserDao.addUser", user);
session.commit();
System.out.println("这是i的值========="+i);
session.close(); } public void updateUser(User user) {
SqlSession session = factory.openSession();
int update = session.update("dao.IUserDao.updateUser", user);
session.commit();
session.close(); } public void deleteUser(int id) {
SqlSession session = factory.openSession();
int delete = session.delete("dao.IUserDao.deleteUser", id);
session.commit();
session.close();
} public User findById(int id) {
SqlSession session = factory.openSession();
User list = session.selectOne("dao.IUserDao.findById",id);
session.close();
return list;
} public List<User> findByName(String str) {
SqlSession session = factory.openSession();
List<User> list = session.selectList("dao.IUserDao.findByName", str);
session.close();
return list;
} public List<User> findByVo(QueryVo vo) {
return null;
} public int findTotal() {
SqlSession session = factory.openSession();
int o = session.selectOne("dao.IUserDao.findTotal");
return o;
}
}

3、持久层配置文件的书写

src\main\resources\dao\IUserDao.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.IUserDao"> <select id="findAll" resultType="domain.User">
select * from user
</select> <!--<select id="findAll" resultType="domain.User">
select * from user
</select>-->
<insert id="addUser" parameterType="domain.User">
<!--获取插入用户的id-->
<!--会把id存入传入的user对象中-->
<selectKey keyProperty="id" resultType="int" order="AFTER">
select last_insert_id();
</selectKey>
insert into user (username,address,sex,birthday) value (#{username},#{address},#{sex},#{birthday})
</insert> <delete id="deleteUser" parameterType="java.lang.Integer">
delete from user where id=#{id}
</delete> <update id="updateUser" parameterType="domain.User">
update user set username=#{username},address=#{address},sex=#{sex},birthday=#{birthday}
</update> <select id="findById" parameterType="int" resultType="domain.User">
select * from user where id=#{id}
</select> <select id="findByName" resultType="domain.User" parameterType="String">
<!--select * from user where username like '%${value}%'-->
<!-- 使用上面方式模糊查询时Statment对象通过字符串拼接的方式连接sql语句
下面的sql语句使用PrepatedStatement的参数占位符有预处理,
所以下面这种方式使用的多
-->
select * from user where username like #{str}
</select> <select id="findTotal" resultType="int">
select count(id) from user
</select> </mapper>

4、测试类的书写

src\test\java\test\MybatisTest.java

package test;

import dao.IUserDao;
import dao.impl.UserDaoImpl;
import domain.QueryVo;
import domain.User;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.scripting.xmltags.TextSqlNode;
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.Test; import java.io.InputStream;
import java.util.Date;
import java.util.List; public class MybatisTest {
/**
* 测试mybatis的CRUD操作
*/
InputStream in; IUserDao uesrdao;
@Before
public void init() throws Exception {
in = Resources.getResourceAsStream("SqlMapConfig.xml");
SqlSessionFactory build = new SqlSessionFactoryBuilder().build(in);
uesrdao = new UserDaoImpl(build); } @After
public void destory() throws Exception {
in.close();
}
@Test
public void testFainAll(){
//查询所有
List<User> users = uesrdao.findAll();
for (User usr: users
) {
System.out.println(usr);
}
}
@Test
public void testAddUser(){
//添加用户
User user = new User();
user.setUsername("wf");
user.setAddress("中国");
user.setSex("男");
user.setBirthday(new Date()); System.out.println(user); uesrdao.addUser(user); System.out.println(user); } @Test
public void testUpdateUser(){
//更新用户
User user = new User();
user.setUsername("gx");
user.setAddress("中国");
user.setSex("女");
user.setBirthday(new Date()); uesrdao.updateUser(user); }
@Test
public void testDeleteUser(){
//删除用户
uesrdao.deleteUser(51); } @Test
public void testFindOne(){
//通过id查找用户
User user = uesrdao.findById(48);
System.out.println(user);
}
@Test
public void testFindByName(){
//通过模糊查询查找用户
List<User> users = uesrdao.findByName("%g%");
//List<User> users = uesrdao.findByName("g"); for(User user:users){
System.out.println(user); }
} @Test
public void testFindTotal(){
//通过聚合函数查询
int a = uesrdao.findTotal();
System.out.println(a);
} }

SSM框架之Mybatis(3)dao层开发的更多相关文章

  1. 基于Mybatis的Dao层开发

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

  2. (转)MyBatis框架的学习(三)——Dao层开发方法

    http://blog.csdn.net/yerenyuan_pku/article/details/71700957 使用MyBatis开发Dao层,通常有两个方法,即原始Dao开发方法和Mappe ...

  3. 02.MyBatis在DAO层开发使用的Mapper动态代理方式

    在实际开发中,Mybatis作用于DAO层,那么Service层该如何调用Mybatis Mybatis鼓励使用Mapper动态代理的方式 Mapper接口开发方法只需要程序员编写Mapper接口(相 ...

  4. 基于Mybatis的Dao层的开发

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

  5. Mybatis的Dao层实现原理

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

  6. SSM框架-初学Mybatis框架

    SSM(Spring+SpringMVC+Mybatis)是目前项目开发比较流行的一套组合框架,而Mybatis是负责数据库操作的那部分框架,具体 我也说不上来 传统的JDBC操作比较冗长而繁琐,而用 ...

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

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

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

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

  9. mybatis dao 层开发简易版 非整合 spring

    同样老习惯,先上项目结构截图 首先 补充上篇文中缺失的 mysql demo 用的 小脚本 drop database if exists mybatis; CREATE DATABASE `myba ...

随机推荐

  1. Java 并发编程 | 线程池详解

    原文: https://chenmingyu.top/concurrent-threadpool/ 线程池 线程池用来处理异步任务或者并发执行的任务 优点: 重复利用已创建的线程,减少创建和销毁线程造 ...

  2. Maven 教程之 pom.xml 详解

    作者:dunwu https://github.com/dunwu/blog 推荐阅读(点击即可跳转阅读) 1. SpringBoot内容聚合 2. 面试题内容聚合 3. 设计模式内容聚合 4. My ...

  3. 添加商品到购物车add_to_cart.php(学生笔记)

    <?php session_start();//启动session $goods_id = $_POST['goods_id'];//获取商品id $number = $_POST['num'] ...

  4. javaweb 复习随笔

    js和jsp区分: js是一种脚本语言,常运行在前台和客户端交互,不会给服务器带来负担,可以更好的修饰静态页面 jsp可以说是servlet的一种,jsp会先翻译,翻译成Servlet执行,运行在服务 ...

  5. 7.智能快递柜(APP及微信公众号)

    1.智能快递柜(开篇) 2.智能快递柜(终端篇) 3.智能快递柜(通信篇-HTTP) 4.智能快递柜(通信篇-SOCKET) 5.智能快递柜(通信篇-Server程序) 6.智能快递柜(平台篇) 7. ...

  6. 【Java基础】Java中的反射机制

    一.反射的理解 (1)正射 在理解反射这个概念之前,我们先来理解Java中的“正射”. 我们在编写代码时,当需要使用到某一个类的时候,必定先会去了解这是一个什么类,是用来做什么的,有怎么样的功能. 之 ...

  7. 中间人攻击,HTTPS也可以被碾压

    摘要: 当年12306竟然要自己安装证书... 原文:知道所有道理,真的可以为所欲为 公众号:可乐 Fundebug经授权转载,版权归原作者所有. 一.什么是MITM 中间人攻击(man-in-the ...

  8. Saltstack_使用指南14_无master

    1. 主机规划 salt 版本 [root@salt100 ~]# salt --version salt (Oxygen) [root@salt100 ~]# salt-minion --versi ...

  9. YUM命令总结

    1.关于YUM源 Yum 全称为 Yellow dog Updater Modified,它是一个在线的软件安装命令. 能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装 ...

  10. python使用beautifulsoup4爬取酷狗音乐

    声明:本文仅为技术交流,请勿用于它处. 小编经常在网上听一些音乐但是有一些网站好多音乐都是付费下载的正好我会点爬虫技术,空闲时间写了一份,截止4月底没有问题的,会下载到当前目录,只要按照bs4库就好, ...