Mybatis入门程序增删改查操作

学习目标

  • 了解Mybatis的基本知识
  • 熟悉Mybatis的工作原理
  • 掌握Mybatis入门程序的编写

     

文章目录

1.初始Mybatis

2.Mybatis入门程序

 3.Mybatis操作总结


1.初始Mybatis

  • MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。
  • MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。
  • MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。

2.Mybatis入门程序

1.在MySQL数据库中,创建一个名为mybatis的数据库,在此数据库中创建user表,同时插入相关数据.

2.在Eclipse中,创建Java Project工程,将Mybatis的核心JAR包,lib目录中的依赖JAR包,以及MySQl数据库的驱动JAR包一同添加到项目的lib目录下,并发布到类路径中.添加后的目录如下图

3.MySQL默认使用log4j输出日志信息.如果要查看控制台的输出SQL语句,需要在src目录下创建log4j.properties文件

# Global logging configuration
log4j.rootLogger=ERROR, stdout
# MyBatis logging configuration...
log4j.logger.com.mybatis.mapper=DEBUG
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

4.在src目录下,创建一个com.mybatis.po包,在该包下创建持久化类Customer.实际上,Customer就是一个POJO(普通Java对象),Mybatis就是采用POJO作为持久化类来完成对数据库的操作的.

package com.mybatis.po;public class Customer {private Integer id; // 主键idprivate String username; // 客户名称private String jobs; // 职业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 getJobs() {return jobs;}public void setJobs(String jobs) {this.jobs = jobs;}public Customer(Integer id, String username, String jobs) {super();this.id = id;this.username = username;this.jobs = jobs;}public Customer() {}@Overridepublic String toString() {return "Customer [id=" + id + ", username=" + username + ", jobs=" + jobs + "]";}}

 5.在src目录下,创建一个com.mybatis.mapper包,并在包中创建映射文件Customermapper.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.mybatis.mapper.CustomerMapper"><!-- 根据客户编号获取客户信息 --><select id="findCustomerById" parameterType="Integer"resultType="com.mybatis.po.Customer">select * from user where id = #{id}</select><!-- 根据客户名模糊查询客户信息列表 --><select id="findCustomerByName" parameterType="String"resultType="com.mybatis.po.Customer">select * from user where username like '%${value}%'</select><!-- 添加用户信息 --><insert id="addCustomer"parameterType="com.mybatis.po.Customer">insert into user(id,username,jobs)values(#{id},#{username},#{jobs})</insert><!-- 更新用户信息 --><update id="updateCustomer"parameterType="com.mybatis.po.Customer">update user setusername=#{username},jobs=#{jobs} whereid=#{id}</update><!-- 删除客户信息 --><delete id="deletetCustomer" parameterType="Integer">delete from userwhere id=#{id}</delete></mapper>	

6. 在src目录下,创建Mybatis的核心配置文件mybatis-config.xml文件.

<?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><environments default="mysql"><environment id="mysql"><transactionManager type="JDBC" /><dataSource type="POOLED"><property name="driver" value="com.mysql.jdbc.Driver" /><property name="url" value="jdbc:mysql://localhost:3306/mybatis" /><property name="username" value="root" /><property name="password" value="123456" /></dataSource></environment></environments><mappers><mapper resource="com/mybatis/mapper/CustomerMapper.xml" /></mappers>
</configuration>

7.在src目录下,创建一个com.mybatis.test包,在该包下创建测试类MybatisTest,并在类中编写各种测试方法.

package com.mybatis.test;import java.io.InputStream;import java.util.List;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 com.mybatis.po.Customer;/** 入门程序测试类*/public class MybatisTest {@Testpublic void findCustomerByNameTest() throws Exception {/** 根据客气编号查询客户信息*/// 1.读取文件String resource = "mybatis-config.xml";InputStream inputStream = Resources.getResourceAsStream(resource);// 2.通过配置文件构建 SqlSessionFactorySqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);// 3.通过SqlSessionFactory创建SqlSessionSqlSession sqlSession = sqlSessionFactory.openSession();// 4.SqlSession执行映射文件中定义的SQL,并返回映射结果Customer customer = sqlSession.selectOne("com.mybatis.mapper.CustomerMapper" + ".findCustomerById", 2);// 打印输出结果System.out.println(customer.toString());// 5.关闭SqlSessionsqlSession.close();}@Testpublic void findCustomerByNameTest2() throws Exception {/* 根据用户名名称来模糊查询用户信息列表 */// 1.读取文件String resource = "mybatis-config.xml";InputStream inputStream = Resources.getResourceAsStream(resource);// 2.通过配置文件构建 SqlSessionFactorySqlSessionFactory SqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);// 3.通过SqlSessionFactory创建SqlSessionSqlSession sqlSession = SqlSessionFactory.openSession();// SqlSession执行映射文件中定义的SQl,并返回映射结果List<Customer> customers = sqlSession.selectList("com.mybatis.mapper.CustomerMapper" + ".findCustomerByName","a");for (Customer customer : customers) {// 打印输出结果System.out.println(customer);}// 4.4提交事务sqlSession.commit();// 5.关闭sqlSessionsqlSession.close();}/** 添加客户*/@Testpublic void addCustomerTest() throws Exception {// 1.读取文件String resource = "mybatis-config.xml";InputStream inputStream = Resources.getResourceAsStream(resource);// 2.通过配置文件构建 SqlSessionFactorySqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);// 3.通过SqlSessionFactory创建SqlSessionSqlSession sqlSession = sqlSessionFactory.openSession();// 4.SqlSession执行添加操作// 4.1创建Customer对象,并向对象中添加数据Customer customer = new Customer();customer.setId(5);// 每次添加时需要更改id的值customer.setUsername("Rose");customer.setJobs("公务员");// 4.2执行SqlSession的插入方法,返回的是SQL语句影响的行数int rows = sqlSession.insert("com.mybatis.mapper.CustomerMapper" + ".addCustomer", customer);// 4.3通过返回结果判断插入操作是否执行成功if (rows > 0) {System.out.println("您成功插入了" + rows + "条数据!");} else {System.out.println("执行插入操作失败!");}// 4.4提交事务sqlSession.commit();// 5.关闭sqlSessionsqlSession.close();}/** 更新客户*/@Testpublic void updateCustomerTest() throws Exception {// 1.读取文件String resource = "mybatis-config.xml";InputStream inputStream = Resources.getResourceAsStream(resource);// 2.通过配置文件构建 SqlSessionFactorySqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);// 3.通过SqlSessionFactory创建SqlSessionSqlSession sqlSession = sqlSessionFactory.openSession();// 4.SqlSession执行添加操作// 4.1 创建Customer对象,对对象中的数据模拟更新Customer customer = new Customer();customer.setId(2);customer.setUsername("mack");customer.setJobs("教师");int rows = sqlSession.update("com.mybatis.mapper.CustomerMapper" + ".updateCustomer", customer);// 4.3通过返回结果判断插入操作是否执行成功if (rows > 0) {System.out.println("您成功修改了" + rows + "条数据!");} else {System.out.println("修改操作失败!");}// 4.4提交事务sqlSession.commit();// 5.关闭sqlSessionsqlSession.close();}/* 删除客户 */@Testpublic void deleteCustomerTest() throws Exception {// 1.读取文件String resource = "mybatis-config.xml";InputStream inputStream = Resources.getResourceAsStream(resource);// 2.通过配置文件构建 SqlSessionFactorySqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);// 3.通过SqlSessionFactory创建SqlSessionSqlSession sqlSession = sqlSessionFactory.openSession();// 4.sqlSession执行删除操作// 4.1执行sqlSession的删除方法,返回的是SQL语句影响的行数int rows = sqlSession.delete("com.mybatis.mapper.CustomerMapper" + ".deletetCustomer", 3);if (rows > 0) {System.out.println("您成功删除了" + rows + "条数据!");} else {System.out.println("删除操作失败!");}// 4.4提交事务sqlSession.commit();// 5.关闭sqlSessionsqlSession.close();}}

8.选中每一个方法名,右击使用JUnit4执行.可在控制台查看输出结果.

 3.Mybatis操作总结

  1. 读取配置文件。
  2. 根据配置文件构建SqlSessionFactory。
  3. 通过SqlSessionFactory创建SqlSession。
  4. 使用SqlSession对象操作数据库(包括查询,添加,修改,删除以及提交事务等)。

 

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

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

相关文章

Memcached:列出所有Key

翻译自 Memcached&#xff1a;列出所有Key 在一般情况下&#xff0c;有没有办法列出所有的Key&#xff0c;一个memcached的实例存储。但是&#xff0c;您可以列出类似于第一个1Meg键的内容&#xff0c;这在开发过程中通常就足够了。这是如何做&#xff1a; Telnet到您的服务…

jzoj5354-导弹拦截【dp,最大匹配,最少路径覆盖】

正题 解题思路 一个东西可以拦截导弹&#xff0c;每次只能打比上一次x,y,zx,y,zx,y,z都大的导弹。求一个最多可以拦截掉多少个导弹和至少要多少个才能拦截完。拦截导弹没有顺序要求。 解题思路 由于没有顺序要求所以我们可以直接定义一个比较&#xff0c;然后第一问做法和导弹…

ASP.NET Core 2.0 全局配置项

问题 如何在 ASP.NET Core 2.0 应用程序中读取全局配置项&#xff1f; 答案 首先新建一个空项目&#xff0c;并添加两个配置文件&#xff1a; 1. appsettings.json { "Section1": { "SettingA": "ValueA", "SettingB": "V…

Auto.JS 教程

最近淘宝双十一活动来了&#xff0c;有个自动领猫币的脚本&#xff0c;基于auto.js&#xff0c;亲测有效。有兴趣的点这里 声明&#xff1a; 本教程基于b站up主-笔青居的视频。传送门&#xff1a;https://space.bilibili.com/21486893/video Auto.JS Auto.js 是个基于 JavaScri…

Mybatis的核心配置

学习目标 了解Mybatis核心对象的作用熟悉Mybatis配置文件中各个元素的作用掌握Mybatis映射文件中常用元素的使用 文章目录 1.Mybatis的核心对象 1.1 SqlSessionFactory 1.2 SqlSession 1.2.1 使用工具类创建SqlSession 2. 配置文件 2.1 主要元素 3. 映射文件 2.1主要元素…

jzoj5353-村通网【最小生成树】

正题 题目大意 一条边的价格为两个点的曼哈顿距离乘B&#xff0c;修建源点价格为A。要求每个联通块内都有源点的最小价格。 解题思路 对于最终每个联通块肯定是棵树。对于合并每个联通块可以减少一个源点。所以将最小生成树上价格小于A的边都加进去就可以了。 codecodecode …

auto.js小案例

微信朋友圈自动点赞 var it className("ListView").findOne(); var i1;while(i<5){say desc(评论).findOne();say.click();goodtext(赞).findOne();goodpgood.parent();goodp.click();sleep(1000);it.scrollDown();i; }home();微信轰炸机 toast("轰炸机已准…

本土开源、立足全球 | COSCon'17

全球公有云 90% 的服务器运行的是开源 Linux 操作系统&#xff01; GitHub 上有超过 150 万个组织&#xff0c;正在进行开源开发&#xff01; 本土开源项目目前在 Apache 的顶级以及孵化列表中已经有 6 个&#xff01; 你想知道这其中都有什么奥秘吗&#xff1f;Apache 顶级项目…

Zookeeper选举原理——FastLeaderElection

转载自 Zookeeper选举原理 作为一个分布式应用程序协调服务&#xff0c;在大型网站中&#xff0c;其本身也是集群部署的&#xff0c;安装zookeeper的时候最好是单数节点&#xff0c;因为要选举。Zookeeper的leader节点是集群工作的核心&#xff0c;用来更新并保证leader和ser…

P2742-二维凸包/圈奶牛Fencing the Cows【凸包】

正题 题目链接:https://www.luogu.org/recordnew/lists?uidSSL_WYC_zombieeeeee&pidP2742&status&sort0 题目大意 求凸包总长度 解题思路 求凸包 codecodecode #include<cstdio> #include<algorithm> #include<cmath> #define N 10010 usin…

Wamp升级php到7.3版本

在网上找了关于cms的模板&#xff0c;结果显示php版本低于7.2的无法使用。 找了很多wamp和xampp的安装包&#xff0c;要不然版本没到7.2&#xff0c;要不然安装无法使用&#xff0c;浪费了很多时间 于是想自己手动把php升到7.3版本&#xff0c;刚开始看教程&#xff0c;特别麻烦…

浅析Entity Framework Core中的并发处理

前言 Entity Framework Core 2.0更新也已经有一段时间了,园子里也有不少的文章.. 本文主要是浅析一下Entity Framework Core的并发处理方式. 1.常见的并发处理策略 要了解如何处理并发,就要知道并发的一般处理策略 悲观并发策略 悲观并发策略,正如其名,它指的是对数据被外界&…

Mybatis的关联映射

学习目标 了解数据表之间以及对象之间的三种关联关系熟悉关联关系中的嵌套查询和嵌套结果掌握一对一、一对多和多对多关联映射的使用文章目录 1. 关联关系概述 2. 一对一 3.一对多 4. 多对多 1. 关联关系概述 一对一的关系&#xff1a;就是在本类中定义对方类型的对象一对…

POJ3348-Cows【凸包,计算几何】

正题 题目大意 凸包的面积S&#xff0c;求⌊S/50⌋\left \lfloor S/50\right \rfloor⌊S/50⌋ 解题思路 求凸包&#xff0c;然后求面积&#xff0c;然后求答案。 codecodecode #include<cstdio> #include<algorithm> #include<cmath> #define N 10010 usi…

【乱码】字符串乱码

1、html <meta charset"UTF-8">2、mysql mysql_query(set names "utf8");3、php header("Content-Type: application/json;charsetUTF-8");json解码 $a你好; echo json_encode($a);加入 $aurldecode($a);即可解码

.NET Core 使用RSA算法 加密/解密/签名/验证签名

前言 前不久移植了支付宝官方的SDK&#xff0c;以适用ASP.NET Core使用支付宝支付&#xff0c;但是最近有好几位用户反应在Linux下使用会出错&#xff0c;调试发现是RSA加密的错误&#xff0c;下面具体讲一讲。 RSA在.NET Core的改动 以前我们使用RSA加密主要是使用RSACryptoSe…

C++描述杭电OJ 2012.素数判定 ||

C描述杭电OJ 2012.素数判定 || Problem Description 对于表达式n^2n41&#xff0c;当n在&#xff08;x,y&#xff09;范围内取整数值时&#xff08;包括x,y&#xff09;(-39<x<y<50)&#xff0c;判定该表达式的值是否都为素数。 Input 输入数据有多组&#xff0c;…

ajax读取.txt文件出现乱码

其实挺简单一问题&#xff0c;刚开始以为页面没输入 <meta charset"UTF-8">结果还是乱码&#xff0c;后来想到老师讲过&#xff0c;新建文件时保存文件有utf8和ANSI等格式&#xff0c;一看果然不对&#xff0c;自己每次新建文件默认格式都是ANSI&#xff0c;这…

P3369-[模板]普通平衡树【有旋Treap】

正题 评测记录:https://www.luogu.org/recordnew/lists?uidSSL_WYC_zombieeeeee&pidP3369&status&sort0 题目大意 要求支持查询一个数字的排名&#xff0c;查询该排名的数字&#xff0c;插入数字&#xff0c;删除数字&#xff0c;求前驱后继。 解题思路 有旋Tr…

ASP.NET Core中的OWASP Top 10 十大风险-SQL注入

本博文翻译自&#xff1a; https://dotnetcoretutorials.com/2017/10/11/owasp-top-10-asp-net-core-sql-injection/ OWASP或者说是开放Web应用程序安全项目&#xff0c;这是一个非营利性的组织&#xff0c;其目的是促进安全的web应用程序的开发和设计。当他们在世界各地举办不…