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. ASP.NET 页面控制

    一.HTTPRequest对象封装客户端请求页面或提交表单时提供的信息 请求方法:get/post 参数名/值 Cookie 使用的语言二.Rquest对象常用方法与属性 属性: QueryStrin ...

  2. koa2 从入门到进阶之路 (七)

    之前的文章我们介绍了一下 koa koa-static静态资源中间件,本篇文章我们来看一下 koa 中 cookie 和 session 的使用. cookie 是存储于访问者的计算机中的变量.可以让 ...

  3. Java题库——Chapter9 String的用法

    1)Which code fragment would correctly identify the number of arguments passed via the command line t ...

  4. golang-基础

    1.go的特点 兼具动态语言的开发效率与C,C++,java的性能安全性 ,内置编译器 2.go的安装 go的sdk下载:  https://studygolang.com/dl go的IDE下载: ...

  5. HTML实例之搜索栏(附源码)

    1. 简书类 实现效果 html代码 <div class="container"> <form action="" class=" ...

  6. Python 定时任务的实现方式

    本文转载自: https://lz5z.com/Python%E5%AE%9A%E6%97%B6%E4%BB%BB%E5%8A%A1%E7%9A%84%E5%AE%9E%E7%8E%B0%E6%96% ...

  7. 个人的一点小愚见,java有什么优点和缺点

    java是一种面向对象的编程语言,优点是可移植性比较高,最初设计时就是本着一次编写到处执行设计的.可以开发各种应用程序和游戏,不过速度没有c++快,所以一般是不用java来编写应用程序和电脑游戏. j ...

  8. CSRF说明

    CSRF: 跨站请求伪造 与XSS区别: XSS:利用用户对站点的信任 CSRF:利用站点对已经经过身份认证客户端的信任 CSRF原理(在用户非自愿.不知情的情况下提交请求): 当client已经与s ...

  9. numpy和matplotlib的pyplot函数的简单应用实现

  10. 201871010102-常龙龙《面向对象程序设计(java)》第十六周学习总结

    项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.com/nwnu-daizh/p ...