关键词:
框架:mybatis(3.5.2)
数据库:mysql
工具:idea
1 <!-- mybatis核心依赖 --> 2 <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis --> 3 <dependency> 4 <groupId>org.mybatis</groupId> 5 <artifactId>mybatis</artifactId> 6 <version>${mybatis.version}</version> 7 </dependency> 8 9 <!-- mysql驱动 --> 10 <dependency> 11 <groupId>mysql</groupId> 12 <artifactId>mysql-connector-java</artifactId> 13 <version>${mysql.version}</version> 14 </dependency>
2、新建实体类User、工具类MybatisUtils、数据访问接口UserDao及它的实现类UserDaoImpl
1 private Integer uid; 2 private String userName; 3 4 public Integer getUid() { 5 return uid; 6 } 7 8 public void setUid(Integer uid) { 9 this.uid = uid; 10 } 11 12 public String getUserName() { 13 return userName; 14 } 15 16 public void setUserName(String userName) { 17 this.userName = userName; 18 }
MybatisUtils类:
1 private static SqlSessionFactory sqlSessionFactory; 2 3 /** 4 * 在静态代码块中初始化工厂 5 */ 6 static{ 7 //先查找mybatis的核心配置文件来初始化数据源, 8 //默认从classpath下查找核心配置文件 9 try { 10 //注意:import org.apache.ibatis.io.Resources; 11 InputStream is = Resources.getResourceAsStream("mybatis.xml"); 12 //创建一个SqlSessionFactoryBuilder来解析配置文件的信息, 13 // 然后创建出SqlSessionFactory实例 14 SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder(); 15 //build方法传入一个输入流,通过解析后返回一个SqlSessionFactory实例 16 sqlSessionFactory = builder.build(is); 17 18 } catch (IOException e) { 19 e.printStackTrace(); 20 } 21 } 22 23 /** 24 * 提供一个获取SqlSession的方法 25 * @param autoCommit 在获取SQL Session时可以传递一个boolean类型的参数值, 26 * 这个参数的作用似乎用于设置是否手动提交事务还是自动提交事务, 27 * false为手动提交,true为自动提交 28 * @return 29 */ 30 public static SqlSession getSqlSession(boolean autoCommit){ 31 //通过openSession方法来创建一个sqlSession实例, 32 //有了SqlSession,就可以来访问数据库 33 return sqlSessionFactory.openSession(autoCommit); 34 }
UserDao接口:
1 /** 2 * 通过传递一个对象形式保存用户 3 * @param user 4 */ 5 void save(Users user); 6 7 /** 8 * 通过传递一个map集合保存用户 9 * @param map 10 */ 11 void save2(Map<String, Object> map); 12 13 /** 14 * 通过传递一个对象修改用户 15 * @param user 16 */ 17 void update(Users user); 18 19 /** 20 * 通过id删除用户 21 * @param id 22 */ 23 void delete(int id); 24 25 /** 26 * 通过传递多个参数修改用户 27 * @param userName 28 * @param uid 29 */ 30 void update2(String userName, int uid); 31 32 /** 33 * 根据id查询一条结果集,返回一个实体对象 34 * @param uid 35 * @return 36 */ 37 Users getUserById(String uid); 38 39 /** 40 * 根据id查询一条结果集,返回一个map集合 41 * @param id 42 * @return 43 */ 44 Map<String, Object> getUserById2(String id); 45 46 /** 47 * 查询所有,返回多个Users对象 48 * @return 49 */ 50 List<Users> listUser(); 51 52 /** 53 * 根据所有结果集,返回多个map集合 54 * @return 55 */ 56 List<Map<String, Object>> listUser2();
在UserDaoImpl类实现UserDao接口并重写抽象方法:
1 @Override 2 public void save(Users user) { 3 //获取SqlSession实例,true表示自动提交事务 4 try(SqlSession session = MybatisUtils.getSqlSession(true)){ 5 //getMapper方法返回一个代理对象,这个代理对象也是实现了UserDao接口 6 //底层使用JDK动态代理技术 7 UserDao dao = session.getMapper(UserDao.class); 8 //当执行save方法时,其实调用的时代理对象的save, 9 //它会解析mapper映射配置文件,找到id为save的元素 10 //并执行其中的sql语句 11 dao.save(user); 12 }catch (RuntimeException e){ 13 14 throw e; 15 } 16 } 17 18 @Override 19 public void save2(Map<String, Object> map) { 20 try(SqlSession sqlSession = MybatisUtils.getSqlSession(true)){ 21 sqlSession.getMapper(UserDao.class).save2(map); 22 }catch(RuntimeException e){ 23 throw e; 24 } 25 } 26 27 @Override 28 public void update(Users user) { 29 try(SqlSession sqlSession = MybatisUtils.getSqlSession(true)){ 30 sqlSession.getMapper(UserDao.class).update(user); 31 }catch (RuntimeException e){ 32 throw e; 33 } 34 } 35 36 @Override 37 public void delete(int id) { 38 try(SqlSession sqlSession = MybatisUtils.getSqlSession(true)){ 39 sqlSession.getMapper(UserDao.class).delete(id); 40 }catch (RuntimeException e){ 41 throw e; 42 } 43 } 44 45 @Override 46 public void update2(String userName, int uid) { 47 try(SqlSession sqlSession = MybatisUtils.getSqlSession(true)) { 48 sqlSession.getMapper(UserDao.class).update2(userName, uid); 49 }catch (RuntimeException e){ 50 throw e; 51 } 52 } 53 54 @Override 55 public Users getUserById(String uid) { 56 try(SqlSession sqlSession = MybatisUtils.getSqlSession(true)) { 57 return sqlSession.getMapper(UserDao.class).getUserById(uid); 58 }catch (RuntimeException e){ 59 throw e; 60 } 61 } 62 63 @Override 64 public Map<String, Object> getUserById2(String id) { 65 try(SqlSession sqlSession = MybatisUtils.getSqlSession(true)) { 66 return sqlSession.getMapper(UserDao.class).getUserById2(id); 67 }catch (RuntimeException e){ 68 throw e; 69 } 70 } 71 72 @Override 73 public List<Users> listUser() { 74 try(SqlSession sqlSession = MybatisUtils.getSqlSession(true)) { 75 return sqlSession.getMapper(UserDao.class).listUser(); 76 }catch (RuntimeException e){ 77 throw e; 78 } 79 } 80 81 @Override 82 public List<Map<String, Object>> listUser2() { 83 try(SqlSession sqlSession = MybatisUtils.getSqlSession(true)) { 84 return sqlSession.getMapper(UserDao.class).listUser2(); 85 }catch (RuntimeException e){ 86 throw e; 87 } 88 }
上述这些类的结构如图所示:
3、在main目录下的resources目录中新建一个mybatis.xml文件,以及mapper文件夹下新建一个UsersMapper.xml(此文件命名规范是实体类名+Mapper)如图所示:
mybatis.xml:
1 <?xml version="1.0" encoding="utf-8"?> 2 <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" 3 "http://mybatis.org/dtd/mybatis-3-config.dtd"> 4 <!-- mybatis核心配置,用于配置相关数据源以及连接池等信息,以及实体类的别称映射,插件配置等等 --> 5 <configuration> 6 <!-- 指定实体类的别名,方便在mapper配置中进行引用 --> 7 <typeAliases> 8 <!-- 方法1、定义一个alias别名,缺点在于需要一个实体类分别指定 9 <typeAlias type="edu.nf.ch01.entity.Users" alias="user" />--> 10 <!-- 方法2、也可以使用package来给某个包下面的所有实体类自动创建别名, 11 自动创建的别名规则是类的类名并将首字母改为小写 --> 12 <package name="edu.nf.ch01.entity"/> 13 </typeAliases> 14 <!-- 配置数据源环境,default指定默认的数据源 --> 15 <environments default="mysql"> 16 <!-- 创建一个MySQL的数据源环境,id就叫mysql --> 17 <environment id="mysql"> 18 <!-- 配置事务管理,这里有JDBC和MANAGED两个值 19 JDBC:使用本地jdbc的事务 20 MANAGED:mybatis不参与事务管理,由运行容器来管理事务--> 21 <transactionManager type="JDBC"/> 22 <!-- 配置数据源,type指定获取连接的方式,有以下几个值: 23 POOLED:使用mybatis自带的数据库连接池(方便连接的复用) 24 UNPOOLRF:不使用连接池,而是每次请求都从数据库去获取连接 25 JMDI:通过查找JNDI树去获取数据源对象,通常结合web容器或者EJB容器来配置 --> 26 <dataSource type="POOLED"> 27 <!-- 配置数据源信息,驱动,url,连接的账号密码等 --> 28 <property name="driver" value="com.mysql.jdbc.Driver"/> 29 <property name="url" value="jdbc:mysql://localhost:3306/mybatis?useUnicode=true&characterEncoding=utf-8"/> 30 <property name="username" value="root"/> 31 <property name="password" value="root"/> 32 </dataSource> 33 </environment> 34 </environments> 35 36 <!-- 指定mapper配置文件 --> 37 <mappers> 38 <mapper resource="mapper/UsersMapper.xml" /> 39 </mappers> 40 </configuration>
UsersMapper.xml:
1 <?xml version="1.0" encoding="utf-8"?> 2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 3 "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> 4 <!-- mapper根节点的namespace指定Dao接口的完整类名, 5 因为mybatis在解析的时候要根据这个类名找到相应dao方法执行 --> 6 <mapper namespace="edu.nf.ch01.dao.UserDao"> 7 <!-- 映射SQL语句,比如<insert>标签用于映射insert语句, 8 id属性对应Dao接口中的方法名 9 parameterType表示Dao接口方法参数的类型,可以指定完整类名, 10 这里指定实体类的别名,也就是在mybatis.xml中定义的别名 11 在sql语句中使用#{}表达式来指定要插入的列,{}中指定实体的字段名--> 12 <insert id="save" parameterType="edu.nf.ch01.entity.Users"> 13 insert into user_info(u_name) values(#{userName}) 14 </insert> 15 16 <!-- 如果参数类型时Map集合,那么#{}表达式对应的就是Map的kek,parameterType中也可以为map --> 17 <insert id="save2" parameterType="java.util.Map"> 18 insert into user_info(u_name) values(#{uname}) 19 </insert> 20 21 <update id="update" parameterType="edu.nf.ch01.entity.Users"> 22 update user_info set u_name = #{userName} where u_id = #{uid}; 23 </update> 24 25 <delete id="delete" parameterType="int"> 26 delete from user_info where u_id = #{id} 27 </delete> 28 <!-- 当有多个参数时,不需要指定parameterType属性, 29 而是使用#{param1}#{param2}...的方式映射参数,对应方法参数的顺序 --> 30 <update id="update2"> 31 update user_info set u_name = #{param1} where u_id = #{param2} 32 </update> 33 34 <!-- 查询当个用户,将结果集封装成一个实体对象 35 resultType属性指定查询结果集的返回类型, 36 如果返回一个实体,则返回引用mybatis.xml文件中Alias设置的别名 37 需要注意的是,查询sql语句中,查询column必须要和实体的字段名称相同--> 38 <select id="getUserById" parameterType="java.lang.String" resultType="users"> 39 select u_id as uid, u_name as userName from user_info2 where u_id = #{id} 40 </select> 41 42 <!-- 查询单个用户,将结果集封装成一个map集合 43 此时只需要将resultType设置为map即可--> 44 <select id="getUserById2" parameterType="java.lang.String" resultType="map"> 45 select u_id, u_name from user_info2 where u_id = #{id} 46 </select> 47 48 <!-- 查询用户列表,返回list集合,集合中封装了多个实体对象 --> 49 <select id="listUser" resultType="users"> 50 select u_id as uid, u_name as userName from user_info2 51 </select> 52 53 <!-- 查询用户列表,返回list集合,集合中存放多个map对象 --> 54 <select id="listUser2" resultType="map"> 55 select u_id, u_name from user_info2 56 </select> 57 </mapper>
数据库:mybatis
数据表:user_info
1 create table user_info( 2 u_id int primary key auto_increment, 3 u_name varchar(50) not null 4 );
mybatis入门增删改查
上一章我们搭建了Mybatis的环境,这一章我们来实现一下赠删改查,非常简单。1、使用上一章配置好的Mybatis来继续操作: 2、实现增删改查,只需要在UserMapper这个接口里添加方法,和配置一下UserMapper.xml文件即可:2.... 查看详情
初识mybatis框架,实现增删改查等操作
此第一次接触Mybatis框架确实是有点不适应,特别是刚从Hibernate框架转转型过来,那么为什么要使用Mybatis框架,Mybatis框架和Hibernate框架又有什么异同呢?这个问题在我的另一篇blogs中有专门的讲解,今天我主要是带着大家来探讨... 查看详情
oracle+mybatis实现对数据的简单增删改查
第一步:--创建一个表空间:名字叫mybatis,建在D盘下的date文件夹下:第二步:创建用户,名字叫 lisi ,密码为 :123456第三步:给用户授权:第四步:我们在 lisi 用户下创建一个emp表:随便插入几个值:... 查看详情
mybatis实现单表增删改查操作
mybatis是对持久层进行了封装、mybatis文档地址:https://mybatis.org/mybatis-3/zh/index.html下面实现单表的增删改查操作。1.新建maven项目命名为mybatis、并在pom.xml中引入相关依赖<?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://maven.ap 查看详情
框架mybatis入门(基于原生接口的xml版本),对数据库进行简单的增删改查操作(代码片段)
Mybatis是?MyBatis本是Apache的一个开源项目iBatis。是一个基于Java的持久层框架。iBATIS提供的持久层框架包括SQLMaps和DataAccessObjects(DAOs)MyBatis支持自定义SQL、存储过程以及高级映射。MyBatis免除了几乎所有的JDBC代码以及... 查看详情
mybatis实现增删改查(crud)
....com/bear7/p/12491937.html 这里将详细说一下有关mybatis操作数据库实现增删盖查的步骤: *编写接口 *编写对应映射文件中mapper *编写测试类 1.select语句:选择,查询数据 1.1 查看详情
[mybatis]快速搭建一个mybatis程序,实现对数据的增删改查
什么是MyBatis?MyBatis是一款优秀的持久层框架,它支持自定义SQL、存储过程以及高级映射。MyBatis免除了几乎所有的JDBC代码以及设置参数和获取结果集的工作。MyBatis可以通过简单的XML或注解来配置和映射原始类型、接口和JavaPOJO... 查看详情
shardingspherespringboot整合shardingjdbc+mybatis进行增删改查
...ataSource,那证明我们已经可以通过shardingjdbc的连接来操作数据库。本文我们将使用springboot整合shardingjdbc+mybatis,真正的实现分库分表的操作。大佬请略过整合mybatis添加mybatis依赖<dependency><groupId>org. 查看详情
mybatis简单的mybatis增删改查模板
简单的mybatis增删改查模板:<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEmapperPUBLIC"-//mybatis.org//DTDMapper3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mappernamespace="com.suneee.sc 查看详情
jdbc实现最简单的增删改查
...说,接下来就说明怎么用JDBC实现最简单的增删改查我用的数据库是Mysql1.创建一个MAVEN项目,需要导入两个jar包分别为lombok和mysql的jar包,在MAVEN的仓库网站可以轻松找得到2.导入jar包之后我们来进行数据库的连接操作其步骤 查看详情
maven+mybatis实现数据库增删改查(代码片段)
Maven+Mybatis实现数据库增删改查1.新建一个普通的Maven项目,在pom.xml导入maven依赖。2.创建一个模块在mybatis-config.xml编写mybatis的核心配置文件3.编写mybatis工具类4.编写代码:实体类5.编写代码:dao接口6.编写代码:... 查看详情
mybatis数据库的增删改查
配置文件 以增加为例 对数据库操作进行封装所需的包文件目录 查看详情
springboot整合微信小程序实现登录与增删改查
项目描述:在微信小程序中通过与Springboot操作数据库实现登录验证,其中我是用springboot整合mybatis-plus 和mysql操作数据库1.开发前准备1.1前置知识java基础SpringBoot简单基础知识1.2环境参数开发工具:IDEA基础环境:Maven+JDK8所用... 查看详情
如何利用springboot整合微信小程序实现登录与增删改查(含代码解析)
项目描述:在微信小程序中通过与Springboot操作数据库实现简单的增删改查,其中我是用springboot整合mybatis-plus和mysql使用的.1.开发前准备1.1前置知识java基础SpringBoot简单基础知识1.2环境参数开发工具:IDEA基础环境:Maven+JDK8主要技... 查看详情
mybatis学习2:实现增删改查操作crud(代码片段)
环境搭建见本专栏上篇。查询用户根据指定id查询用户1.编写接口//根据id查询用户UserselectUserById(intid);2.修改Mapper.xml<selectid="selectUserById"resultType="com.kuang.pojo.User">select*fromuserwhereid=#i 查看详情
基于mybatis的动态表数据增删改查方法实现(代码片段)
实体类importcom.baomidou.mybatisplus.annotation.IdType;importcom.baomidou.mybatisplus.annotation.TableId;importlombok.Data;importjava.text.ParseException;importjava.text.SimpleDateFormat;importjava.util. 查看详情
增删改查项目属于前端还是后端
...增删改查功能,例如使用Java语言编写Servlet,通过JDBC连接数据库实现对数据的操作。4因此,增删改查项目既需要前端技术,也需要后端技术的支持,属于前后端共同协作的项目。参考技术A1增删改查项目属于后端。2因为增删改... 查看详情
mybatis-spring--sqlsessiontemplate实现增删改查
...过程,本节按照前面介绍的流程,通过SqlSessionTemplate实现数据库的增删改差。第一步:创建spring-my 查看详情