项目实现的功能

查询所有用户信息
通过Id查询用户信息
添加用户(回显主键)
修改用户信息
删除用户信息
通过用户名字模糊查询

一、引入依赖和工程结构

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.william</groupId><artifactId>MybatisMapper</artifactId><version>1.0-SNAPSHOT</version><properties><maven.compiler.source>1.8</maven.compiler.source><maven.compiler.target>1.8</maven.compiler.target></properties><dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version></dependency><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.4.5</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.47</version></dependency></dependencies></project>

二、创建实体类

User

package com.william.domain;import java.util.Date;/*** @author :lijunxuan* @date :Created in 2019/7/9  19:28* @description :* @version: 1.0*/
public class User {private  Integer id;private String username;private String password;private String  sex;private Date birthday;@Overridepublic String toString() {return "User{" +"id=" + id +", username='" + username + '\'' +", password='" + password + '\'' +", sex='" + sex + '\'' +", birthday=" + birthday +'}';}public Date getBirthday() {return birthday;}public void setBirthday(Date birthday) {this.birthday = birthday;}public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}}

三、映射文件

1.UserMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.william.dao.UserMapper"><!--查询所有用户信息--><select id="findAll" resultType="com.william.domain.User">select * from user</select><!--通过ID查询用户信息--><select id="findById" parameterType="java.lang.Integer" resultType="com.william.domain.User">select * from user where id=#{id}</select><!--模糊查询--><select id="findByUsername" parameterType="java.lang.String" resultType="com.william.domain.User">select * from user where username like "%"#{value}"%"</select><!--增加用户信息   主键回显--><insert id="insert" parameterType="com.william.domain.User">
--         selectKey: 查询主键值
--         resultType: 主键类型
--         keyColumn: 指定主键的列名
--         keyProperty: 主键对应的属性名
--         order:可选值:after ,before
--         AFTER: 在执行sql语句之后执行查找主键操作
--         BEFORE: 在执行sql语句之前执行查找主键操作<selectKey resultType="java.lang.Integer" keyColumn="id" keyProperty="id" order="AFTER" >select last_insert_id()</selectKey>insert into user values (null ,#{username},#{password},#{sex},#{birthday})</insert><!--更新用户信息--><update id="update" parameterType="com.william.domain.User">update  user set username=#{username},password=#{password},sex=#{sex},birthday=#{birthday} where id=#{id}</update><!--删除用户信息--><delete id="delete" parameterType="java.lang.Integer">delete  from user where id =#{id}</delete>
</mapper>

四、引入log4j

log4j.properties

# Set root category priority to INFO and its only appender to CONSOLE.
#log4j.rootCategory=INFO, CONSOLE            debug   info   warn error fatal
log4j.rootCategory=debug, CONSOLE, LOGFILE, info# Set the enterprise logger category to FATAL and its only appender to CONSOLE.
log4j.logger.org.apache.axis.enterprise=FATAL, CONSOLE# CONSOLE is set to be a ConsoleAppender using a PatternLayout.
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%d{ISO8601} %-6r [%15.15t] %-5p %30.30c %x - %m\n# LOGFILE is set to be a File appender using a PatternLayout.
log4j.appender.LOGFILE=org.apache.log4j.FileAppender
log4j.appender.LOGFILE.File=d:\axis.log
log4j.appender.LOGFILE.Append=true
log4j.appender.LOGFILE.layout=org.apache.log4j.PatternLayout
log4j.appender.LOGFILE.layout.ConversionPattern=%d{ISO8601} %-6r [%15.15t] %-5p %30.30c %x - %m\n

五、测试类

TestCrud

package com.william;import com.william.dao.UserMapper;
import com.william.domain.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.Test;import javax.annotation.Resource;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;/*** @author :lijunxuan* @date :Created in 2019/7/12  10:16* @description :* @version: 1.0*/
public class TestCrud {/*** 查询所有用户信息* @throws IOException*/@Testpublic void findAll() throws IOException {InputStream inputStream = Resources.getResourceAsStream("Mybatis-configuration.xml");SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);SqlSession sqlSession = sqlSessionFactory.openSession();//获取某接口的动态代理对象(获取某接口的一个实现类)UserMapper userMapper = sqlSession.getMapper(UserMapper.class);List<User> userList = userMapper.findAll();for (User user : userList) {System.out.println(user);}sqlSession.close();}/****通过Id查询用户信息* @throws IOException*/@Testpublic void findById() throws IOException {InputStream inputStream = Resources.getResourceAsStream("Mybatis-configuration.xml");SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);SqlSession sqlSession = sqlSessionFactory.openSession();//获取某接口的动态代理对象(获取某接口的一个实现类)UserMapper userMapper = sqlSession.getMapper(UserMapper.class);User findByIdUser = userMapper.findById(43);System.out.println(findByIdUser);sqlSession.close();}/*** 模糊查询* 通过用户名模糊查询* @throws IOException*/@Testpublic void findByUsername() throws IOException {InputStream inputStream = Resources.getResourceAsStream("Mybatis-configuration.xml");SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);SqlSession sqlSession = sqlSessionFactory.openSession();//获取某接口的动态代理对象(获取某接口的一个实现类)UserMapper userMapper = sqlSession.getMapper(UserMapper.class);List<User> findByIdUsernameList = userMapper.findByUsername("a");for (User user : findByIdUsernameList) {System.out.println(user);}sqlSession.close();}/*** 增加用户信息* @throws IOException*/@Testpublic void  insert() throws IOException {InputStream inputStream = Resources.getResourceAsStream("Mybatis-configuration.xml");SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);SqlSession sqlSession = sqlSessionFactory.openSession();//获取某接口的动态代理对象(获取某接口的一个实现类)UserMapper userMapper = sqlSession.getMapper(UserMapper.class);User user= new User();user.setUsername("today");user.setPassword("hello");user.setSex("女");userMapper. insert(user);//事务提交sqlSession.commit();System.out.println("添加后用户的id为:"+user.getId());sqlSession.close();}/*** 更新用户信息* @throws IOException*/@Testpublic void  update() throws IOException {InputStream inputStream = Resources.getResourceAsStream("Mybatis-configuration.xml");SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);SqlSession sqlSession = sqlSessionFactory.openSession();//获取某接口的动态代理对象(获取某接口的一个实现类)UserMapper userMapper = sqlSession.getMapper(UserMapper.class);User user= new User();user.setId(45);user.setUsername("today");user.setPassword("hello");user.setSex("女");userMapper. update(user);//事务提交sqlSession.commit();sqlSession.close();}/*** 通过id删除用户信息* @throws IOException*/@Testpublic void  delete() throws IOException {InputStream inputStream = Resources.getResourceAsStream("Mybatis-configuration.xml");SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);SqlSession sqlSession = sqlSessionFactory.openSession();//获取某接口的动态代理对象(获取某接口的一个实现类)UserMapper userMapper = sqlSession.getMapper(UserMapper.class);userMapper. delete(50);//事务提交sqlSession.commit();sqlSession.close();}
}

【重点】mybatis动态代理模式开发的要求

1.dao接口和映射文件必须路径相同,文件名相同(dao接口和映射文件必须在同一个文件夹中,文件名必须相同)

如图所示:

2.namespace必须是 接口的全限定类名

3.映射文件中的id值必须是接口的方法名

4.参数类型和返回值类也必须是匹配的

Mybatis动态代理模式实现CRUD相关推荐

  1. mybatis动态代理

    文章目录 动态SQL if关键字 where 标签 where和if联合使用 set标签 trim标签 foreach标签 动态代理 JDK自带动态代理 CGLib代理 演示 MyBatis中的动态代 ...

  2. JDK动态代理模式这篇就够了

    JDK动态代理 第一章 代理的介绍 介绍:我们需要掌握的程度 动态代理(理解) 基于反射机制 掌握的程度: 1.什么是动态代理? 2.动态代理能够做什么? 1.1 什么是代理 代理,在我们日常生活之中 ...

  3. 【设计模式】--- 装饰器模式、静态代理模式和动态代理模式

    文章目录 1 引子 2 业务场景介绍 3 静态代理模式 4 装饰器模式 5 动态代理模式 5.1 Proxy --- 具体的代理对象生成组件 5.2 InvocationHandler --- 封装被 ...

  4. MyBatis动态代理原理

    1. MyBatis核心组件 在详细探究MyBatis中动态代理机制之前,先来补充一下基础知识,认识一下MyBatis的核心组件. SqlSessionFactoryBuilder(构造器): 它可以 ...

  5. Mybatis动态代理和非动态代理的理解

    Mybatis动态代理的好处 传统分层模式,我们在处理业务的时候需要些 dao 层,然后再 写 dao层的实现类 具体处理业务在 dao 层的实现类中进行处理, 而 mybatis 在配置 实体类的  ...

  6. 【Android架构师java原理详解】二;反射原理及动态代理模式

    前言: 本篇为Android架构师java原理专题二:反射原理及动态代理模式 大公司面试都要求我们有扎实的Java语言基础.而很多Android开发朋友这一块并不是很熟练,甚至半路初级底子很薄,这给我 ...

  7. 设计模式之动态代理模式实战

    昨天分享了静态代理的概念及存在的缺点,所以今天讲的动态代理模式十分重要.动态代理在我们工作当中应用相当广泛,如Srping AOP就是动态代理的在开源框架的比较出名的应用. 动态代理有两种试,一是通过 ...

  8. 代理模式和动态代理模式_代理模式介绍

    代理模式和动态代理模式 代表:被选中或当选为他人投票或代理的人– Merriam-Webster . 委托模式:在软件工程中,委托模式是面向对象编程中的一种设计模式,其中,一个对象而不是执行其陈述的任 ...

  9. Android开发中无处不在的设计模式——动态代理模式

    继续更新设计模式系列.写这个模式的主要原因是近期看到了动态代理的代码. 先来回想一下前5个模式: - Android开发中无处不在的设计模式--单例模式 - Android开发中无处不在的设计模式-- ...

最新文章

  1. python中forward函数的引用_调用没有.forward()的forward函数
  2. 二分搜索 POJ 3273 Monthly Expense
  3. Python与MySQL的交互
  4. 全面认识Small Cell
  5. 第 6-3 课:SpringBoot 核心 + 面试题
  6. 穷的时候要记住这5点,才能有机会翻身
  7. C# MD5加密与解密
  8. 2017 Multi-University Training Contest - Team 4 hdu6071 Lazy Running
  9. 华为交换机做qos案例_华为交换机QoS在企业网络中的应用
  10. android ev3 蓝牙连接,乐高EV3蓝牙安装和连接
  11. Safari 浏览器扩展安装后未显示
  12. Sensor 数据整理
  13. Docker——数据卷的概述和使用
  14. vue 所有按钮属性、vue Button 所有按钮属性事件、vue a-button 所有按钮属性事件、vue 按钮所有属性事件、vue
  15. 蛋蛋读UFS之三:UFS数据包UPIU
  16. ​草莓熊python绘图(春节版,圣诞倒数雪花版)附源代码
  17. 没有乔布斯的MacWorld :8个瞬间
  18. 某东签名算法解析(一)
  19. 关于未来几年家庭信息通讯的几点遥想
  20. UML中的9种图例解析

热门文章

  1. dp括号匹配 网易面试题_面试题:大括号验证
  2. 参数化测试 junit_使用JUnit 5进行更清洁的参数化测试
  3. docker 部署java_使用Docker堆栈部署的微服务-WildFly,Java EE和Couchbase
  4. jpa 关联实体的关联实体_JPA实体锁定模式的差异
  5. java转换为c#_C#vs Java哪一个更快? 将25k C#转换为Java(2)
  6. 游戏ai 行为树_游戏AI –行为树简介
  7. 如何从云功能调用外部REST API
  8. udt java_Java DB中的Java用户定义类型(UDT)
  9. 使用Zipkin和Sleuth进行SpringBoot微服务跟踪
  10. cxf restful_使用Apache CXF开发RESTful服务