mybatis --入门 单表增删改查-curd

目录

    • 1. mybatis 环境搭建
    • 2. 实体类映射文件配置(写sql)
    • 3. mybatis核心配置文件 (环境配置)
    • 4. 测试

mybatis document
https://mybatis.org/mybatis-3/zh/

mybatis in github
https://github.com/mybatis/mybatis-3

1. mybatis 环境搭建

这里使用maven项目构建

  <dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.11</version><scope>test</scope></dependency><!-- mysql 驱动包 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.20</version></dependency><!-- mybatis 框架 --><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.5</version></dependency>    </dependencies>

2. 实体类映射文件配置(写sql)

  • 实体类
package cn.bitqian.entity;/*** user 类* @author echo lovely* @date 2020/9/9 20:59*/
public class User {private Integer userId;private String userName;private String userPassword;public User() {}public User(Integer userId, String userName, String userPassword) {this.userId = userId;this.userName = userName;this.userPassword = userPassword;}// 省略set/get toString..
}
  • user-mapper.xml(注意命名空间,标签 id,占位符)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><!-- 实体类 与 sql解耦映射文件 -->
<mapper namespace="userMapper"><!-- sql 语句 和 对应的查询结果类型 --><select id="selectAll" resultType="cn.bitqian.entity.User">select * from users1</select><!-- parameterType 为接收参数的类型 #{实体类属性名} 表示占位符 --><!-- 插入操作 需要user参数 --><insert id="insertUser" parameterType="cn.bitqian.entity.User">insert into users1 values (#{userId}, #{userName}, #{userPassword})</insert><!-- 修改操作 --><update id="updateUser" parameterType="cn.bitqian.entity.User">update users1 set username = #{userName}, userpassword = #{userPassword}where userid = #{userId}</update><!-- 根据id删除某个user --><delete id="deleteUser" parameterType="java.lang.Integer">delete from users1 where userid = #{userId}</delete>
</mapper>

3. mybatis核心配置文件 (环境配置)

  • jdbc 连接配置
driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatis_study?serverTimezone=GMT
username=root
password=123456
  • mybatis-config 配置 (注意头文件的引入)
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration><!-- 读取jdbc.properties 配置信息 --><properties resource="jdbc.properties"></properties><environments default="development"><!--部署环境--><environment id="development"><!-- 配置事务管理器 --><transactionManager type="JDBC"></transactionManager><!-- 配置数据源 --><dataSource type="POOLED"><property name="driver" value="${driver}"/><property name="url" value="${url}"/><property name="username" value="${username}"/><property name="password" value="${password}"/></dataSource></environment></environments><mappers><!-- 加载映射用户 xml这里有个小问题,cn/bitqian/mapper, 看文件夹有没三层 --><mapper resource="cn.bitqian.mapper/user-mapper.xml"/></mappers>
</configuration>
  • 包名就叫cn.bitqian.mapper, 没有分层

4. 测试

  • 由于初学,模板化的代码我写了四遍… 其中包含了单表curd
package DemoTest;import cn.bitqian.entity.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 java.io.IOException;
import java.io.InputStream;
import java.util.List;/*** mybatis 单表增删改查操作* @author echo lovely* @date 2020/9/9 21:36*/
public class TestMybatisCurd {// 查询单表@Testpublic void test1() {SqlSession sqlSession = null;try {// mybatis 读取核心文件流InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");// 通过sql 会话工厂构建器 创建session 工厂SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);// 拿到sessionsqlSession = sqlSessionFactory.openSession();// 进行查询List<User> userList = sqlSession.selectList("userMapper.selectAll");System.out.println(userList);} catch (IOException e) {e.printStackTrace();} finally {// 释放session资源if (sqlSession != null)sqlSession.close();}}@Testpublic void test2() {SqlSession sqlSession = null;try {// 加载mybatis核心配置文件InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");// 获得session工厂SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);// 通过session工厂获得sessionsqlSession = sqlSessionFactory.openSession();User user = new User(null, "taylor swift", "gorgeous");// 通过user-mapper 命名空间和id进行相应的sql操作int count = sqlSession.insert("userMapper.insertUser", user);// 进行增删改操作时 要提交事务sqlSession.commit();System.out.println("count = " + count);} catch (IOException e) {e.printStackTrace();} finally {if (sqlSession != null)sqlSession.close();}}// 修改单个用户@Testpublic void test3() {SqlSession sqlSession = null;try {InputStream resourceAsStream = Resources.getResourceAsStream("mybatis-config.xml");SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);sqlSession = sqlSessionFactory.openSession();User user = new User(1, "rose", "love jack");int count = sqlSession.update("userMapper.updateUser", user);sqlSession.commit();System.out.println(count);} catch (IOException e) {e.printStackTrace();} finally {if (sqlSession != null)sqlSession.close();}}// 删除user@Testpublic void tes4() {SqlSession sqlSession = null;try {InputStream resourceAsStream = Resources.getResourceAsStream("mybatis-config.xml");SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);sqlSession = sqlSessionFactory.openSession();sqlSession.delete("userMapper.deleteUser", 1);sqlSession.commit();} catch (IOException e) {e.printStackTrace();} finally {if (sqlSession != null)sqlSession.close();}}}

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

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

相关文章

ios开发之.pch文件的使用

案例&#xff1a;开源中国iOS客户端 当我们新建一个工程的时候&#xff0c;在Supporting FIles文件下会看到一个以 -Prefix.pch结尾文件的文件&#xff0c;pch全称是“precompiled header”&#xff0c;也就是预编译头文件&#xff0c;该文件里存放的工程中一些不常被修…

循环给对象创建属性名和属性值

4.7号笔记&#xff1a; ​ ① 循环给对象创建属性名和属性值&#xff1a; data.forEach(item > {item.identity identity;})console.log(data);

CWnd与HWND的区别与转换

一、区别HWND是句柄&#xff0c;CWnd是MFC窗体类,CWnd中包含HWND句柄成员对象是m_hWnd.HWND是Windows系统中对所有窗口的一种标识&#xff0c;即窗口句柄。这是一个SDK概念。 CWnd是MFC类库中所有窗口类的基类。微软在MFC中将所有窗口的通用操作都封装到了这个类中&#xff0…

字符串截取后两位,字符串转成数组,再转换位字符串

4.11号笔记 字符串去掉所有空格&#xff0c;转成数组&#xff0c;再转成字符串 var str 你好&#xff01; 世界 * * var arr str.replace(/\s/g, "").split("");//去掉所有空格并转成数组arr.splice(-2, 2); // 从最后面截取两位str arr.join(&q…

mybatis dao实现 || 接口代理方式实现

目录1、mybatis环境搭建2、mybatis dao接口实现3、动态代理方式&#xff0c;只实现Mapper接口mybatis入门单表操作demo mybatis dao层实现1. 实现dao层接口 2. 接口代理方式实现dao代理开发要求&#xff1a;​ Mapper接口开发方法只需要编写Mapper接口&#xff08;相当于dao接…

lvs-dr模式原理详解和可能存在的“假负载均衡”

原文地址&#xff1a; http://blog.csdn.net/lengzijian/article/details/8089661 lvs-dr模式原理 转载注明出处&#xff1a;http://blog.csdn.net/lengzijian/article/details/8089661 先附上一张原理图&#xff1a; 为了更清晰的表述lvs-dr原理&#xff0c;我们用tcpdump工具…

rem.js常用代码

rem.js (function flexible(window, document) {var docEl document.documentElement;var dpr window.devicePixelRatio || 1;// adjust body font size// 设置 em 默认字体所对应的大小function setBodyFontSize() {if (document.body) {document.body.style.fontSize 12 …

mybatis3 类型别名

目录问题描述解决方案方案二&#xff0c;直接扫描包问题描述 <!-- 插入操作 需要user参数 --><insert id"insertUser" parameterType"cn.bitqian.entity.User">insert into users1 values (#{userId}, #{userName}, #{userPassword})</inse…

vue-获取某个组件渲染的Dom根元素

function getComponentRootDom(comp, props){const vm new Vue({render: h > h(comp, {props})})vm.$mount();return vm.$el;}

动态sql (sql-if,sql-foreach)

目录1. UserMapper接口1. sql-if2. sql-foreach3. 多条件查询和根据多个id查询测试say sth.. 每当我回顾以前写jdbc分页&#xff0c;多条件查询时&#xff0c;我那是有多痛苦。 特别是当我拼接条件时&#xff0c;对象.getName 又是判断null&#xff0c;又是判断空字符串的。 还…

把一张合成图分拆出各个小图

反编译一个程序&#xff0c;看到一张合成图&#xff0c;想分拆出里面的每个小图&#xff0c;知道了各个图的坐标大小后&#xff0c;写了一个小方法&#xff0c;希望对大家有用哈 package com.bitimage;import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStr…

6_js数组常用函数进阶与String

1 数组常用函数的应用 1.1 数组常用方法解析进阶 文档&#xff1a;const - JavaScript | MDN 课堂案例&#xff1a;01.find&Some方法的应用.html find() 从数组中找到满足条件的第一个元素并且并返回它。否则返回 undefined。 findIndex()*方法返回数组中满足提供的测试…

vue-快速原型开发

官方地址&#xff1a; https://cli.vuejs.org/zh/guide/prototyping.html

mybatis TypeHandler 类型处理器

目录1. 自定义日期类型处理器2. 配置自定义日期处理器3. 新增&#xff0c;查询1. 自定义日期类型处理器 继承mybatis提供的BaseTypeHandler覆写方法&#xff0c; 来转换Java和数据库中的字段package cn.bitqian.config;import org.apache.ibatis.type.BaseTypeHandler; import…

使用map递归树形结构

mapTree (data) {const reg /^e/;const regu /^u/;data.map(items > {if(items.children.length < 1){if(reg.test(items.userid)){items.disabled true //遍历树 拼入相应的disabled}else if(regu.test(items.userid)){items.children undefined }}else{this.mapTr…

分页查询插件PageHelper 5.x版本

目录1. jar包依赖2. mybatis核心文件配置3. 简简单单分页1. jar包依赖 <!--分页助手--><dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper</artifactId><version>5.2.0</version></dependency&…

适用于ELment-UI级联多选框,数据回填,根据子节点的值查找完整路径

适用于ELment-UI级联多选框el-cascader&#xff0c;数据回填&#xff0c;根据子节点的值查找完整路径 已知子元素id,怎么获取它所有的父元素&#xff1f;用递归实现 /*** 查找匹配的完整路径* id: 匹配的值* data: 匹配的数组数据* prop: 匹配的字段名*/searchPath (id, …

多表操作查询 一对一

目录1. 一对一关系2. 一对一外键关联查询配置1. 一对一关系 数据库中的一对一关系 – 主键关联和外键关键 如person表和身份证表card 1、主键关联 create table person (pid int primary key auto_increment,pname varchar(40) not null,pgender varchar(10) not null )crea…

BZOJ-1045 糖果传递

先拆成链的情况来看。 设B[i]表示i要向i1拿糖果的数量&#xff0c;C为平均数&#xff0c;则B[i] C - A[i] B[i-1] Answer就是B的绝对值之和 现在来看环的情况&#xff0c;也就是说B[n]指的是n要向1拿糖果的数量。不妨设B[n]为K&#xff0c;则B[1] C - A[1] K………… 照着式…

一对多,多对多查询

1. 一对多配置 1. 什么是一对多 如用户表和订单表&#xff0c; 单个用户可能有多个订单&#xff0c;即一对多。如班级表和学生表 一个班级有多个学生&#xff0c;学生表的外键为 班级表的主键。如下面就是一对多&#xff0c;查询用户对应的订单配置 <?xml version"1…