SSM框架之Mybatis(3)dao层开发
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层开发的更多相关文章
- 基于Mybatis的Dao层开发
转自:https://www.cnblogs.com/rodge-run/p/6528398.html 基于Mybatis的Dao层开发 SqlSessionFactoryBuilder用于创建 Sq ...
- (转)MyBatis框架的学习(三)——Dao层开发方法
http://blog.csdn.net/yerenyuan_pku/article/details/71700957 使用MyBatis开发Dao层,通常有两个方法,即原始Dao开发方法和Mappe ...
- 02.MyBatis在DAO层开发使用的Mapper动态代理方式
在实际开发中,Mybatis作用于DAO层,那么Service层该如何调用Mybatis Mybatis鼓励使用Mapper动态代理的方式 Mapper接口开发方法只需要程序员编写Mapper接口(相 ...
- 基于Mybatis的Dao层的开发
基于Mybatis的Dao层开发 SqlSessionFactoryBuilder用于创建SqlSessionFacoty,SqlSessionFacoty一旦创建完成就不需要SqlSessionFa ...
- Mybatis的Dao层实现原理
1.Mybatis的Dao层实现 1.1 传统开发方式 1.1.1编写UserDao接口 public interface UserDao { List<User> findAll() t ...
- SSM框架-初学Mybatis框架
SSM(Spring+SpringMVC+Mybatis)是目前项目开发比较流行的一套组合框架,而Mybatis是负责数据库操作的那部分框架,具体 我也说不上来 传统的JDBC操作比较冗长而繁琐,而用 ...
- Mybatis的dao层实现 接口代理方式实现规范+plugins-PageHelper
Mybatis的dao层实现 接口代理方式实现规范 Mapper接口实现时的相关规范: Mapper接口开发只需要程序员编写Mapper接口而不用具体实现其代码(相当于我们写的Imp实现类) Mapp ...
- MyBatis开发Dao层的两种方式(原始Dao层开发)
本文将介绍使用框架mybatis开发原始Dao层来对一个对数据库进行增删改查的案例. Mapper动态代理开发Dao层请阅读我的下一篇博客:MyBatis开发Dao层的两种方式(Mapper动态代理方 ...
- mybatis dao 层开发简易版 非整合 spring
同样老习惯,先上项目结构截图 首先 补充上篇文中缺失的 mysql demo 用的 小脚本 drop database if exists mybatis; CREATE DATABASE `myba ...
随机推荐
- 【Java基础】正则表达式
目录 正则表达式 什么正则表达式 普通字符 预定义字符 特殊字符 数量限定字符 定位字符 选择符和分组 反向引用 预搜索 运算符的优先级 常用正则 附录 正则表达式 本文的大部分内容转载自正则表达式从 ...
- Linux-shell学习笔记2
1.命令的运行顺序 以相对/绝对路径运行命令,例如『 /bin/ls 』或『 ./ls 』: 由 alias 找到该命令来运行: 由 bash 内建的 (builtin) 命令来运行: 通过 $PAT ...
- 利用Dynamics 365 Customer Engagement的标准导入功能导入附件。
我是微软Dynamics 365 & Power Platform方面的工程师罗勇,也是2015年7月到2018年6月连续三年Dynamics CRM/Business Solutions方面 ...
- iOS开发中,获取图片之后保存或下载到本地相册中
#pragma mark 先获取本地图片或者网络图片 - (void)saveHeaderImageWith:(NSString *)path { UIImage *img = [UIImage im ...
- Golang防止多个进程重复执行
创建锁文件 lockFile := "./lock.pid" lock, err := os.Create(lockFile) if err != nil { log.Fatal( ...
- 四、排序算法总结二(归并排序)(C++版本)
一.什么是归并排序? 归并排序是基于分而治之的思想建立起来的. 所谓的分而治之,也就是将一个数据规模为N的数据集,分解为两个规模大小差不多的数据集(n/2),然而分别处理这两个更小的问题,就相当于解决 ...
- C# 常用排序算法
文章引用地址:https://www.cnblogs.com/fengyeqingxiang/archive/2019/06/14/11021852.html C#所有经典排序算法汇总 1 2 3 ...
- Invoke 与 BeginInvoke的区别
引用文章路径:https://www.cnblogs.com/lsgsanxiao/p/5523282.html invoke和begininvoke 区别 一直对invoke和begininvoke ...
- acwing 652. 切蛋糕
题目地址 今天是小Z的生日,同学们为他带来了一块蛋糕. 这块蛋糕是一个长方体,被用不同色彩分成了N个相同的小块,每小块都有对应的幸运值. 小Z作为寿星,自然希望吃到的第一块蛋糕的幸运值总和最大,但小Z ...
- layUI学习第五日:layUI布局系列二
6.列偏移 列偏移可针对不同屏幕的标准进行设定,只会在桌面屏幕下有效,当低于桌面屏幕的规定的临界值,就会堆叠排列. <div class="layui-col-md4 layui-co ...