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 ...
随机推荐
- SpringBoot控制台版图书借阅程序
// 实验存档... 效果图: 完整程序:https://pan.baidu.com/s/1-d1J90dkEtM0WKkABu0K0Q 提取码:hcnm DAO层代码由MyBatis Generat ...
- Python 调用 Hprose接口、Dubbo接口、Java方法
#!/usr/bin/env python # -*- coding:utf-8 -*- # ************************************* # @Time : 2019/ ...
- ASP.NET MVC教程二:ASP.NET MVC应用程序结构详解
在上一篇文章中,讲解了一些MVC的概念,并且创建了第一个ASP.NET MVC项目,这篇文章将讲解ASP.NET MVC程序中的代码解构,新创建的MVC应用程序解构如下图所示: 一.App_Data ...
- java基础(6):方法
1. 方法 1.1 方法概述 在我们的日常生活中,方法可以理解为要做某件事情,而采取的解决办法. 如:小明同学在路边准备坐车来学校学习.这就面临着一件事情(坐车到学校这件事情)需要解决,解决办法呢?可 ...
- NuGet 修改包路径
NuGet 是 .NET 平台下的一个免费.开源的包管理开发工具. 修改全局包管理目录 通过 NuGet 安装包时,NuGet 先将包下载至一个统一的目录,默认路径是:C:\Users\用户名\.nu ...
- 【Swift】WKWebView与JS的交互使用
一.前言 近日,有朋友问我关于WKWebView与JS的交互问题,可我之前一直使用的是UIWebView,也不曾做过WKWebView的交互啊!接下来大家一块学习下WKWebView是怎么实现原生代码 ...
- ubuntu 桌面版, ssh 连接时使用,x转发进行使用 gnome-terminal 时出现:Error calling StartServiceByName for org.gnome.Terminal: Timeout was reached 错误
当我按照这种情景使用时,出现了这种情况: 考虑着 gnome 桌面正在运行,可能是gnome-terminal 使用了工厂模式进行创建:查找gnome-terminal 文档,有如下解决方案: gno ...
- android 完全区分double-tap 与 singal-tap 的方法
需求:viewpager显示图片,需要在双击时对图片进行缩放,单击时在屏幕下方弹出popwindow,由于android的双击本质就是两次单击,但是又不想在双击时触发单击时的动作,所以就在网上各种搜解 ...
- np.unique( )的用法
该函数是去除数组中的重复数字,并进行排序之后输出. 换句话,我想从一个图片选取 1000个不同的点,随机采点经常遇到相同的点,造成重复.np.unique就是用来解决这个问题
- seq参数 RANDOM 参数 openssl参数 cut参数
#seq命令用于以指定增量从首数开始打印数字到尾数 语法: [2] seq [选项] 首数 尾数 [3] seq [选项] 首数 增量 尾数选项: seq 实例 一 存入数据库 然后 输出数据库的代码 ...