Mybatis动态代理模式实现CRUD

项目实现的功能

查询所有用户信息
通过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.参数类型和返回值类也必须是匹配的

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/333073.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL撤销(revoke)用户权限

文章目录撤销用户对某个数据库的全部权限撤销用户对某个数据库的部分权限撤销用户对某个数据库的某张表的部分权限撤销用户对任何数据库的任何表的部分权限撤销 WITH GRANT OPTION 权限权限表撤销权限的巨坑撤销语句要和授权语句完全一致权限 USAGE 是无法撤销的数据库 test 的…

无服务器–仅仅是构建现代应用程序的一种方法?

如果搜索“无服务器”&#xff0c;则会发现无服务器是构建现代应用程序的一种新的流行方式。 无服务器真的是新的吗&#xff1f; 无服务器是指您无需担心服务器的概念–无需置备&#xff0c;部署和维护服务器。 显然有服务器&#xff0c;但是您不必考虑或担心它们&#xff0c;…

Mybatis核心配置文件xml详解

<!-- configuration:在dtd约束中? 代表一次或零次 代表一次或多次&#xff08;最少一次&#xff0c;可以多次&#xff09;* 代表零次或多次&#xff08;有没有都可以&#xff09;, :逗号 特定的顺序&#xff08;&#xff09;| :竖杠 任选其一能添加的标签和顺序properties?…

MySQL查询语句后面加上“\G”,提示 ERROR: No query specified

在查询语句后面以 \G 结尾&#xff0c;表示纵向显示每行记录&#xff0c;如下所示&#xff1a; mysql> select * from student\G; *************************** 1. row ***************************id: 00000000000000000001name: liaowenxiongage: 22score: NULLbirthday:…

c++ 嵌套私有类_嵌套类和私有方法

c 嵌套私有类当您在另一个类中有一个类时&#xff0c;他们可以看到彼此的private方法。 在Java开发人员中并不为人所知。 面试过程中的许多候选人说&#xff0c; private是一种可见性&#xff0c;它使代码可以查看成员是否属于同一班级。 这实际上是对的&#xff0c;但更准确地…

Mybatis多参数封装到一个类中模糊查询

1.创建QueryValueObject实体类 package com.william.domain;import org.omg.PortableInterceptor.USER_EXCEPTION;/*** author &#xff1a;lijunxuan* date &#xff1a;Created in 2019/7/12 12:09* description &#xff1a;* version: 1.0*/ public class QueryValueObje…

MySQL数据库的权限表

文章目录user 表db 表tables_priv 表columns_priv表MySQL 数据库中与权限相关的表&#xff1a;user、db、tables_priv、columns_priv。 user 表 mysql> select * from mysql.user\G *************************** 1. row ***************************Host: localhostUser: …

jakarta ee_MicroProfile在Jakarta EE时代的作用

jakarta ee自创建以来&#xff0c;MicroProfile赢得了广泛的关注&#xff0c;并制定了各种规格。 最初&#xff0c;它的创建是为了在多个供应商的推动下&#xff0c;以更快的速度推进微服务世界的企业Java。 现在&#xff0c;随着在Eclipse Foundation下将Java EE转换为Jakarta…

Linux系统下MySQL数据库的超级管理员root的密码忘记/忘记密码怎么办?

文章目录方法一方法二方法三方法一 1.添加登录跳过权限检查配置 修改 /etc/my.cnf 文件&#xff0c;在 [mysqld] 配置节点添加 skip-grant-tables 配置 [mysqld] skip-grant-tables2.重新启动mysql服务 service mysqld restart3.修改密码 添加登录跳过权限检查配置后&#x…

Mybatis多参数封装到map中,多条件查询

1.UserMapper接口 package com.william.dao;import com.william.domain.QueryValueObject; import com.william.domain.User;import java.util.List;public interface UserMapper {/*** 多参数封装到map中&#xff0c;多条件查询* param map* return*/List<User> findBy…

jax-rs配置_具有MicroProfile配置的可配置JAX-RS ExceptionMapper

jax-rs配置当使用JAX-RS创建REST服务时&#xff0c;通常不返回任何内容&#xff08;例如HTTP 201/2/4等&#xff09;或某些数据&#xff08;可能采用JSON格式&#xff08;因此HTTP 200&#xff09;&#xff0c;或者返回某些异常/错误&#xff08;因此HTTP 4xx或5xx&#xff09;…

MySQL数据库修改用户登录密码的三种方式

文章目录一、更新 mysql.user 表二、用 set password 命令三、使用 mysqladmin 命令提醒&#xff1a;MYSQL5.7 版本后不再支持password()函数和password字段。 一、更新 mysql.user 表 mysql> use mysql; mysql> update user set passwordpassword(123456) where userr…

Mybatis多条件直接查询

1.UserMapper接口 package com.william.dao;import com.william.domain.QueryValueObject; import com.william.domain.User;import java.util.List;public interface UserMapper {/*** 根据多条件直接查询* param username* param sex* param startIndex* param pageSize* re…

java 正在验证应用程序_Java应用程序中的验证

java 正在验证应用程序我经常看到的项目几乎没有任何有意识的数据验证策略。 他们的团队在截止日期&#xff0c;明确要求的巨大压力下工作&#xff0c;只是没有足够的时间以适当且一致的方式进行验证。 因此&#xff0c;数据验证代码随处可见&#xff1a;JavaScript片段&#x…

Mybatis多条件直接查询Param注解版

1.UserMapper接口 package com.william.dao;import com.william.domain.QueryValueObject; import com.william.domain.User;import java.util.List;public interface UserMapper {/*** 多条件直接查询Param注解版* param username* param sex* param startIndex* param pageS…

WPS for MacOS如何设置自动句首字母大写

在顶部菜单栏&#xff0c;点击【文件】–>【文字偏好设置】或者点击左上角的【文件】–>【文字偏好设置】&#xff1a;

java 和javafx_Java,JavaFX的流利设计风格文本字段和密码字段

java 和javafx我刚刚发布了Java版本4.5 &#xff0c;JavaFX主题JMetro 。 此版本为“文本字段”和“密码字段”添加了新样式。 和往常一样&#xff0c;受到Fluent Design的启发。 在这篇文章中&#xff0c;我将详细介绍这个新版本。 JMetro版本4.5 就像我在简介中所说的那样&…

WPS for MacOS如何设置自动编号

在顶部菜单栏&#xff0c;点击【文件】–>【文字偏好设置】或者点击左上角的【文件】–>【文字偏好设置】&#xff1a;

Mybatis结果集映射

一、使用场景 当数据库里的列名和实体类的属性名不一致&#xff0c;就需要进行结果映射 二、UserMapper接口 package com.william.dao;import com.william.domain.QueryValueObject; import com.william.domain.User; import org.apache.ibatis.annotations.Param;import …