- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章MyBatis基本实现过程由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
MyBaties简介 。
MyBatis是支持定制化SQL、存储过程以及高级映射的优秀的持久层框架.
MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集 。
MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和JavaPOJO(Plain Old Java Object,普通的Java对象)映射成数据库中的记录 。
MyBatis历史 。
原是Apache的一个开源项目iBatis, 2010年6月这个项目由Apache Software Foundation 迁移到了Google Code,随着开发团队转投Google Code旗下, iBatis3.x正式更名为MyBatis ,代码于2013年11月 。
迁移到Github下载地址.
iBatis一词来源于“internet”和“abatis”的组合,是一个基于Java的持久层框架。 iBatis提供的持久层框架包括SQL Maps和Data Access Objects(DAO) 。
为什么要使用MyBatis 。
MyBatis是一个半自动化的持久化层框架 。
• JDBC 。
JDBC -@gt; Dbutils(QueryRunner) -@gt; JdbcTemplate:工具 。
功能简单;sql语句编写在java代码里面;硬编码高耦合的方式 。
。
Hibernate:全自动全映射ORM(Object Relation Mapping)框架;旨在消除sql,HQL 。
希望:sql语句交给我们开发人员编写,希望sql不失去灵活性; 。
– SQL夹在Java代码块里,耦合度高导致硬编码内伤 。
– 维护不易且实际开发需求中sql是有变化,频繁修改的情况多见 • Hibernate和JPA 。
– 长难复杂SQL,对于Hibernate而言处理也不容易 。
– 内部自动生产的SQL,不容易做特殊优化.
– 基于全映射的全自动框架,大量字段的POJO进行部分映射时比较困难.
导致数据库性能下降.
• 对开发人员而言,核心sql还是需要自己优化 。
• sql和java编码分开,功能边界清晰,一个专注业务、一个专注数据 。
MyBatis-HelloWorld 。
主要步骤 。
HelloWorld简单版 – 创建一张测试表 。
– 创建对应的javaBean 。
– 创建mybatis配置文件,sql映射文件 。
– 测试 。
首先在数据库中创建一张Employee表随便插入一条数据以便测试 。
CREATE TABLE `tbl_employee` ( `id` int(11) NOT NULL AUTO_INCREMENT, `last_name` varchar(255) DEFAULT NULL, `gender` char(1) DEFAULT NULL, `email` varchar(255) DEFAULT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
在idea中导包 。
创建对应的javaBean对象,重写toString方法,方便后面输出 。
public class Employee { private int id; private String last_name; private String gender; private String email; public Employee() { } public Employee(int id, String laseName, String gender, String email) { this.id = id; this.last_name = laseName; this.gender = gender; this.email = email; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getLaseName() { return last_name; } public void setLaseName(String laseName) { this.last_name = laseName; } public String getGender() { return gender; } public void setGender(String gender) { this.gender = gender; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } @Override public String toString() { return "Employee{" + "id=" + id + ", laseName='" + last_name + '\'' + ", gender='" + gender + '\'' + ", email='" + email + '\'' + '}'; }}
创建Mapper接口 。
import school.xauat.mybatis.bean.Employee;public interface EmployeeMapper { public Employee getEmpById(Integer id);}
创建MyBatis全局配置文件 。
– MyBatis 的全局配置文件包含了影响 MyBatis 行为甚深的设置(settings)和属性(properties)信息、如数据库连接池信息等。指导着MyBatis进行工作。我们可以参照官方文件的配置示例.
@lt;?xml version="1.0" encoding="UTF-8" ?@gt;@lt;!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"@gt;@lt;configuration@gt; @lt;environments default="development"@gt; @lt;environment id="development"@gt; @lt;transactionManager type="JDBC"/@gt; @lt;dataSource type="POOLED"@gt; @lt;property name="driver" value="com.mysql.jdbc.Driver"/@gt; @lt;property name="url" value="jdbc:mysql://localhost:3306/mybatis"/@gt; @lt;property name="username" value="root"/@gt; @lt;property name="password" value="***"/@gt; @lt;/dataSource@gt; @lt;/environment@gt; @lt;/environments@gt; @lt;mappers@gt; @lt;mapper resource="EmployeeMapper.xml"/@gt; @lt;/mappers@gt;@lt;/configuration@gt;
创建SQL映射文件 。
– 映射文件的作用就相当于是定义Dao接口的实现类如何工作。这也是我们使用MyBatis时编写的最多的文件.
@lt;?xml version="1.0" encoding="UTF-8" ?@gt;@lt;!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"@gt;@lt;mapper namespace="school.xauat.mybatis.dao.EmployeeMapper"@gt; @lt;!-- namespace:名称空间;指定为接口的全类名 id:唯一标识 resultType:返回值类型 #{id}:从传递过来的参数中取出id值 --@gt; @lt;select id="getEmpById" resultType="school.xauat.mybatis.bean.Employee"@gt; select * from tbl_employee where id = #{id} @lt;/select@gt;@lt;/mapper@gt;
测试 。
1、根据全局配置文件,利用SqlSessionFactoryBuilder创建SqlSessionFactory对象 。
/** * 获取SqlSessionFactory对象 * @return * @throws IOException */ public static SqlSessionFactory getSqlSessionFactory() throws IOException{ String resource = "mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); return sqlSessionFactory; }
2、使用SqlSessionFactory获取SqlSession对象,一个SqlSession对象代表和数据库的一次会话 。
public static void test01() throws IOException { //1、获取SqlSessionFactory对象 SqlSessionFactory sqlSessionFactory = getSqlSessionFactory(); //2、获取SqlSession对象 SqlSession sqlSession = sqlSessionFactory.openSession(); //3、获取接口的实现类对象 //会为接口自动创建一个代理对象,代理对象去执行增删改查 EmployeeMapper mapper = sqlSession.getMapper(EmployeeMapper.class); Employee employee = mapper.getEmpById(1); System.out.println(mapper.getClass()); System.out.println(employee); sqlSession.close(); }
调用test01 。
注意:
SqlSession 。
• SqlSession 的实例不是线程安全的,因此是不能被共享的.
• SqlSession每次使用完成后需要正确关闭,这个关闭操作是必须的 。
• SqlSession可以直接调用方法的id进行数据库操作,但是我们一般还是推荐使用SqlSession获取到Dao接口的代理类,执行代理对象的方法,可以更安全的进行类型检查操作 。
总结 。
本篇文章就到这里了,希望能给你带来帮助,也希望你能够多多关注我的更多内容! 。
原文链接:https://blog.csdn.net/qq_45796208/article/details/110506295 。
最后此篇关于MyBatis基本实现过程的文章就讲到这里了,如果你想了解更多关于MyBatis基本实现过程的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
如果我声明了类似的类型 type test(NSIZE) integer, len :: NSIZE real :: dummy(NSIZE) contains procedure,
我知道这是一个不太可能的事情,但是由于“选项私有(private)模块”的限制,甚至更糟糕的“私有(private)子/函数”的限制,有谁知道是否有一种方法可以从 Excel 应用程序隐藏 VBA 过
我有两个表,property 和 component。 component.id_property = property.id。 我正在尝试创建一个过程,该过程对所选属性的组件进行计数,如果所选属性没
我有一份报告,它是在 SSRS 2005 中开发的,我正在使用存储过程从数据库中获取结果。报告输出的结果非常简单,如下图所示。 如果假设我正在寻找不同的成员 例如:- MemberID c108 c
我需要一个通用函数/过程,该函数/过程将根据提供的数据计算出我的淡入淡出时间和值,如下所示: 我将字节值保存在字节数组中:这些是起始值。然后,我在其他数组中存储了一些值:这些将是新值。然后我有时间要提
我想在界面的多个按钮上创建相同的操作。是否只能通过创建单独的操作监听器方法并调用执行操作的方法才可行,还是还有其他方法?是否可以将按钮放在一个组中并执行以下操作:- groupButton.setOn
我有以下情况: procedure Test; begin repeat TryAgain := FALSE; try // Code // Code if this an
我正在尝试执行以下操作;假设我在 Oracle 中创建了一个对象类型 create type test as object( name varchar2(12), member procedure p
问题: 如果可能的话,如何声明一个用于任何类型参数的函数 T其中 T 的唯一约束是它被定义为 1D array如 type T is array ( integer range <> ) of a_r
我正在尝试创建这个 mysql 过程来制作一个包含今年所有日期和所有时间的表(以一小时为间隔。) CREATE TABLE FECHAS ( created_at datetime ); CREA
所以, 我在这里面临一个问题,这让我发疯,我认为这是一个愚蠢的错误,所以我不是 MySQL 的新手,但它并不像我想象的那样工作。 尝试将此语句部署到 MySQL 后,我收到此错误: ERROR 106
我有一个架构,其中包含星球大战中的人物列表、他们出现的电影、他们访问的行星等。这是架构: CREATE DATABASE IF NOT EXISTS `starwarsFINAL` /*!40100
我一直在为一家慈善机构创建一款应用程序,允许家庭在节日期间注册接收礼物。数据库组织有多个表。下面列出了这些表(及其架构/创建语句): CREATE TABLE IF NOT EXISTS ValidD
正如上面标题所解释的,我正在尝试编写一个sql函数来按日期删除表而不删除系统表。我在此消息下方放置了一张图片,以便直观地解释我的问题。任何帮助将不胜感激!感谢您的时间! 最佳答案 您可以通过查询INF
DELIMITER $$ CREATE PROCEDURE INSERT_NONE_HISTORY_CHECKBOX() BEGIN DECLARE note_id bigint(20); F
是否可以编写一个存储过程或触发器,在特定时间在数据库内部自动执行,而无需来自应用程序的任何调用?如果是,那么任何人都可以给我一个例子或链接到一些我可以阅读如何做到这一点的资源。 最佳答案 查看 pgA
我需要创建一个过程:1)从表中的字段中选择一些文本并将其存储在变量中2) 更新相同的记录字段,仅添加 yyyymmdd 格式的日期以及过程中的附加文本输入...类似这样的... delimiter /
好的,这就是我想做的: 如果条目已存在(例如基于字段name),则只需返回其id 如果没有,请添加 这是我迄今为止所管理的(对于“如果不存在,则创建它”部分): INSERT INTO `object
以下是我编写的程序,用于找出每位客户每天购买的前 10 件商品。 这是我尝试过的第一个 PL/SQL 操作。它没有达到我预期的效果。 我使用的逻辑是接受开始日期、结束日期以及我对每个客户感兴趣的前“x
我正在尝试在MySQL中创建一个过程那insert week s(当年)发送至我的 week table 。但存在一个问题,因为在为下一行添加第一行后,我收到错误: number column can
我是一名优秀的程序员,十分优秀!