mybatis入门到精通
MyBatis3详细教程
}
public double getComm() { return comm;
}
public void setComm(double comm) { m = comm;
}
public int getEmpno() { return empno;
}
public void setEmpno(int empno) { this.empno = empno;
二、配置文件 1.在 src 源目录下,新建 sqlMapConfig.xml 文件,复制以下内容到 xml 文件中 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-////DTD Config 3.0//EN" "/dtd/mybatis-3-config.dtd"> <configuration> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver"/> <property name="url"
mybatis基本工作原理
mybatis基本工作原理MyBatis是一种Java持久化框架,它的基本工作原理是通过XML或注解来描述数据库操作语句,并将这些语句映射为Java对象的方法。
本文将详细介绍MyBatis的基本工作原理。
MyBatis通过配置文件来初始化和配置数据库连接。
配置文件中包含了数据库连接的相关信息,如数据库驱动、连接URL、用户名和密码等。
通过读取这些配置信息,MyBatis可以建立与数据库的连接。
接下来,MyBatis使用SQL映射文件来描述数据库操作语句。
SQL映射文件包含了一组SQL语句,这些语句用于对数据库进行增删改查操作。
每个SQL语句都被映射为一个唯一的ID,以便在Java代码中进行调用。
MyBatis还支持使用注解来描述数据库操作语句。
通过在Java方法上添加注解,可以直接将数据库操作语句与Java方法关联起来,省去了编写XML文件的步骤。
当Java程序调用MyBatis的方法时,MyBatis会根据方法上的注解或XML文件中的映射关系,动态生成一个SQL语句,并将该语句发送给数据库执行。
执行结果会被封装为Java对象,并返回给调用者。
在生成SQL语句时,MyBatis还支持动态SQL语句的生成。
动态SQL 语句可以根据不同的条件来拼接SQL语句的不同部分,从而实现灵活的数据库操作。
MyBatis还提供了一级缓存和二级缓存机制,以提高数据库操作的性能。
一级缓存是指在同一个SqlSession中,对同一个SQL语句的结果进行缓存。
二级缓存是指将查询结果缓存到一个共享的缓存区域,使得多个SqlSession可以共享同一个查询结果。
除了上述基本工作原理外,MyBatis还提供了许多其他功能,如插件机制、事务管理、数据库连接池等。
插件机制可以扩展MyBatis 的功能,比如实现自定义的拦截器。
事务管理可以保证数据库操作的一致性和隔离性。
数据库连接池可以提高数据库连接的复用性和性能。
总结一下,MyBatis的基本工作原理是通过配置文件或注解来描述数据库操作语句,并将这些语句映射为Java对象的方法。
mybatis入门教程
mybatis入门教程MyBatis是一种开源的持久层框架,它可以帮助我们简化数据库操作的过程。
本教程将介绍如何使用MyBatis进行基本的数据访问操作。
第一步:创建数据库和表首先,我们需要创建一个数据库和一个表来存储数据。
假设我们创建了一个名为"mybatis_demo"的数据库,并在其中创建了一个名为"users"的表,该表包含id、name和age三个字段。
第二步:引入MyBatis依赖在使用MyBatis之前,我们需要在项目的pom.xml文件中引入MyBatis的依赖。
可以在Maven仓库中找到最新的MyBatis版本,并将其添加到pom.xml文件中。
<dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.6</version></dependency>第三步:创建数据源配置文件在src/main/resources目录下创建一个名为"mybatis-config.xml"的文件,并在其中配置数据源信息。
以下是一个示例配置:<?xml version="1.0" encoding="UTF-8"?><configuration><environments default="development"><environment id="development"><transactionManager type="JDBC"/><dataSource type="POOLED"><property name="url"value="jdbc:mysql://localhost:3306/mybatis_demo"/><property name="username" value="root"/></dataSource></environment></environments><mappers><!-- 这里可以配置Mapper接口所在的包 --></mappers></configuration>注意:在实际项目中,我们通常会将数据库连接信息配置在外部的配置文件中,而不是直接写在mybatis-config.xml文件中。
mybatis入门教程(一)(超简单)
mybatis第一天mybatis的基础知识课程安排:mybatis和sprin gmvc通过订单商品案例驱动第一天:基础知识(重点,内容量多)对原生态jdb c程序(单独使用jdb c开发)问题总结mybatis框架原理(掌握)mybatis入门程序用户的增、删、改、查mybatis开发dao两种方法:原始dao开发方法(程序需要编写d a o接口和d a o实现类)(掌握)mybaits的mappe r接口(相当于dao接口)代理开发方法(掌握)mybatis配置文件Sq lMapConfig.xmlmybatis核心:mybatis输入映射(掌握)mybatis输出映射(掌握)mybatis的动态sql(掌握)第二天:高级知识订单商品数据模型分析高级结果集映射(一对一、一对多、多对多)mybatis延迟加载mybatis查询缓存(一级缓存、二级缓存)mybaits和sprin g进行整合(掌握)mybatis逆向工程1对原生态jdbc程序中问题总结1.1环境java环境:jdk1.7.0_72eclipse:indigomysql:5.11.2创建mysql数据导入下边的脚本:sql_table.sql:记录表结构sql_dat a.sql:记录测试数据,在实际企业开发中,最后提供一个初始化数据脚本1.3jdbc程序使用jdbc查询mysql数据库中用户表的记录。
创建java工程,加入jar包:数据库驱动包(m ysql5.1)上边的是mysql驱动。
下边的是ora cle的驱动。
程序代码:1.4问题总结1、数据库连接,使用时就创建,不使用立即释放,对数据库进行频繁连接开启和关闭,造成数据库资源浪费,影响数据库性能。
设想:使用数据库连接池管理数据库连接。
2、将sql语句硬编码到jav a代码中,如果sql 语句修改,需要重新编译java代码,不利于系统维护。
mybatis 知识点
Mybatis 知识点什么是 MybatisMybatis 是一个开源的持久层框架,它提供了一个可以自定义 SQL 映射的方式,以及可以很方便地进行数据库查询和操作的功能。
相比于传统的 ORM 框架,Mybatis 更加灵活,适用于复杂的 SQL 查询和自定义 SQL 语句的情况。
Mybatis 的优点1.灵活性:Mybatis 允许开发者自定义 SQL 映射,可以根据需要编写任意复杂的 SQL 查询语句,更加灵活地操作数据库。
2.性能优化:Mybatis 提供了多种性能优化的手段,比如查询缓存和预编译语句等,可以减少数据库的访问次数,提高系统性能。
3.易于集成:Mybatis 与 Spring 框架完美集成,可以很方便地与 SpringBoot 一起使用,简化开发流程。
Mybatis 的基本使用1. 引入依赖在 Maven 项目的 pom.xml 文件中,添加以下依赖:<dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.1.4</version></dependency>2. 配置数据源在 application.properties 文件中配置数据源信息:spring.datasource.url=jdbc:mysql://localhost:3306/mydbername=rootspring.datasource.password=1234563. 创建实体类和 Mapper 接口创建与数据库表对应的实体类和对应的 Mapper 接口,如下所示:public class User {private Long id;private String name;private Integer age;// 省略 getter 和 setter 方法}public interface UserMapper {List<User> getAllUsers();User getUserById(Long id);void addUser(User user);void updateUser(User user);void deleteUser(Long id);}4. 编写 SQL 映射文件在 resources 目录下创建一个 sqlmap 目录,并在该目录下编写 XML 格式的 SQL 映射文件,如下所示:<!-- UserMapper.xml --><mapper namespace="erMapper"><select id="getAllUsers" resultType="er">SELECT * FROM user;</select><select id="getUserById" resultType="er">SELECT * FROM user WHERE id = #{id};</select><insert id="addUser">INSERT INTO user(name, age) VALUES(#{name}, #{age});</insert><update id="updateUser">UPDATE user SET name = #{name}, age = #{age} WHERE id = #{id};</update><delete id="deleteUser">DELETE FROM user WHERE id = #{id};</delete></mapper>5. 配置 Mybatis在 application.properties 文件中配置 Mybatis 相关的配置项,如下所示:mybatis.mapper-locations=classpath*:sqlmap/**/*.xmlmybatis.configuration.map-underscore-to-camel-case=true6. 注入 Mapper在需要使用 Mapper 的地方进行注入,并调用相应的方法即可:@Servicepublic class UserServiceImpl implements UserService {@Autowiredprivate UserMapper userMapper;@Overridepublic List<User> getAllUsers() {return userMapper.getAllUsers();}// 省略其他方法实现}Mybatis 高级特性动态 SQLMybatis 提供了动态 SQL 的支持,可以根据不同的条件生成不同的 SQL 语句,实现更加灵活的查询。
MyBatis核心技术全解与项目实战读书笔记
《MyBatis核心技术全解与项目实战》读书笔记1. 第一章 MyBatis简介本章主要介绍了MyBatis的基本概念、特点和优势,以及其在Java企业级应用开发中的重要作用。
MyBatis是一个优秀的持久层框架,它将SQL语句与Java对象映射(POJO)相结合,使得开发人员可以更加方便地操作数据库。
MyBatis的主要目标是简化数据库操作,提高开发效率,同时也提供了良好的数据封装和安全性。
SqlSessionFactory:用于创建SqlSession对象,SqlSession是MyBatis中执行SQL语句的核心接口。
SqlSession:用于执行SQL语句的会话对象,可以通过它来执行增删改查等操作。
Mapper:映射器接口,用于定义SQL语句和Java对象之间的映射关系。
Configuration:MyBatis的全局配置类,用于配置各种属性,如缓存策略、事务管理等。
插件:MyBatis的插件机制,允许开发者自定义拦截器、类型处理器等组件,以实现对MyBatis的功能扩展。
灵活性:MyBatis支持多种存储结构,如JDBC、ODBC、JNDI等,同时还支持自定义类型处理器和插件,使得MyBatis能够满足各种复杂的数据库操作需求。
易用性:MyBatis提供了简洁的XML映射文件来描述SQL语句和Java对象之间的映射关系,使得开发者无需编写复杂的SQL语句即可完成数据库操作。
性能优化:MyBatis通过一级缓存和二级缓存机制来提高查询性能,同时还支持动态SQL、分页查询等功能,使得MyBatis能够在高并发环境下保持良好的性能表现。
安全性:MyBatis提供了严格的权限控制机制,可以限制不同用户对数据库的操作权限,保证数据的安全性。
1.1 MyBatis概念及特点MyBatis是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。
相比于传统的数据访问技术,MyBatis让开发者能够更加直接地与数据库交互,从而有效地避免了大量繁琐的SQL语句编写工作。
Mybatis基础知识汇总
Mybatis基础知识汇总Mybatis学习总结:背景介绍:mybatis:前⾝ibatis,于2010年迁移到google code,并改名为Mybatis。
最后在2013年11⽉迁移到gitbub(全球开源⽹站)。
Mybatis 的初步认知:Mybatis 是⼀个半⾃动的ORM持久成框架。
apache下的顶级项⽬。
Mybatis是JDBC的轻量级的封装,使⽤时程序员只需要注⼊sql语句,mybatis通过映射可以灵活⽣成满⾜数据库的sql语句。
解决了jdbc的⼀下⼏个问题:1.jdbc创建和销毁数据库的连接耗资源过⼤解决⽅法:mybatis框架内置连接池。
2.sql语句在javaWeb 项⽬中,修改sql语句需要修改java项⽬中的代码不利于维护。
-解决⽅法:mybatis采⽤配置⽂件注⼊sql语句,使sql语句与java代码分离。
3. 使⽤jdbc查询对象时,够多的参数书写不⽅便。
(每⼀个参数需要书写⼀个?占位符,并且还需要写⼀句对应的java语句)且不利于维护;解决⽅法:Mybatis使⽤⾃动映射java对象⾄sql语句,通过statement的parameterType进⾏传参4.jdbc查询时存在硬编码,当sql语句改变,系统解析是也发⽣变化,造成系统不利于维护。
解决⽅法:Mybatis使⽤⾃动sql语句⾄Java对象,通过statement的resultType进⾏传参Mybatis的使⽤步骤:1. 导⼊所需要的jar包,配置SqlMapConfig.xml,写⼊数据库连接信息,类的别名以及映射关系等信息;2. 加载配置⽂件,获取SqlSessionFactory对象3.获取SqlSession对象:调⽤Mapper.xml的sql语句(insert,update,delete,selectOne,selectLists)4.释放资源案例展⽰:Mybatis的DAO层的两种⽅式:原始DAO层开发⽅式:1.数据库创建数据表本案例使⽤如下数据表:1).创建t_user数据表CREATE TABLE `t_user` (`uid` int(11) NOT NULL AUTO_INCREMENT,`uname` varchar(255) DEFAULT NULL,`usex` varchar(255) DEFAULT NULL,`uage` int(11) DEFAULT NULL,PRIMARY KEY (`uid`)) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;2). 插⼊5条数据:INSERT INTO t_user VALUES ('1', '张三', '男', '25');INSERT INTO t_user VALUES ('2', '李四', '男', '26');INSERT INTO t_user VALUES ('3', '王五', '男', '27');INSERT INTO t_user VALUES ('4', '赵六', '男', '30');INSERT INTO t_user VALUES ('5', '⼩敏', '男', '25');2.导⼊jar包,并配置SqlMapConfig.xml⽂件:1.1}. 导⼊如下图所⽰jar包和log4j.properties注:jar包说明:- asm-4.2.jar- cglib-3.1.jar-1. 处理字节码的jar包- mybatis-3.3.0.jar- mybatis的核⼼jar包- mysql-connector-java-5.1.12-bin.jar- 2.连接数据库jdbcjar包- jstl-1.2- 3.标签jar包- 4.其余jar为⽇志记录jar包,因为mybatis没有⽇志记录系统需要引⽤⽇记jar包完成打印。
mybatis的几种用法
mybatis的几种用法MyBatis是一种优秀的ORM框架,被广泛运用于Java项目中,它可以使开发者更加简便地与数据库交互。
以下是MyBatis的几种用法:1. XML方式MyBatis最早的使用方式是通过XML来配置SQL语句和映射关系。
在这种方式下,我们需要提供一个Mapper.xml文件来定义SQL语句和对应数据模型的映射关系。
这种方式的优点是灵活性高,但是需要编写大量的XML代码。
2. 注解方式MyBatis支持使用注解来配置SQL语句和映射关系,这种方式不需要像XML方式那样编写大量的XML代码。
在这种方式下,我们需要在接口的方法上使用@Select、@Update、@Insert、@Delete等注解来指定SQL语句,并且通过@ResultMap、@Results等注解来声明数据模型的映射关系。
这种方式的优点是简单易用,但是缺点是可读性差。
3. Mapper动态代理方式使用Mapper动态代理方式,我们可以直接调用Mapper接口中的方法来进行CRUD操作,而不需要编写任何的SQL语句和映射关系。
Mapper动态代理方式的优点是使代码更加清晰简洁,但是对于一些复杂的SQL操作,可能需要编写多个Mapper接口方法,从而增加了代码量。
4. 通用Mapper插件通用Mapper插件是MyBatis提供的一个插件,它能够帮助我们自动生成Mapper接口和SQL语句。
在使用通用Mapper插件时,我们需要在MyBatis配置文件中配置mapper接口和映射关系。
使用通用Mapper插件可以减少大量的重复代码,但是对于一些定制化的SQL操作,可能需要在Mapper接口中手动注入SQL。
总之,MyBatis提供了多种使用方式,开发者可以根据自己的需求选择最适合的方式。
MyBatis新手入门
第一章用MyBatis实现增删查改第一步下载打开http://mybatis.github.io/看这里使劲点它!跳转到这个页面再使劲点它就会跳转到github仓库,看到这个界面注意:这里只是mybatis的一些发表信息,点一下它终于来到这个下载地方了,特么的好累动一下你的手指,滚动到最下方点它转到到这里看,出来了吧,找的我那么辛苦,当时恨不得点烂它!解压出来,进去看到第二步搭建和配置这个目录结构就对了,用MyEclipse创建一个Web Project,把mybatis-3.2.8.jar拷贝粘贴到自己创建的MyEclipse项目中的lib下(不知道哪里是MyEclipse项目的lib文件夹的人建议转行别写代码了),我的结构是这样的为什么里面还多了一个mysql-connector-java-5.1.6-bin.jar呢?它是干嘛用的呢?我顺手拷贝进去的,看到这个mysql的jdbc驱动大家应该明白我要测试用的数据库是mysql,自己随意,用什么数据库就拷贝什么驱动。
MyBatis里面是没有的,网上多得是,自己要什么驱动就去下载什么驱动。
可以动手了动手去src下创建3个包,我是这样子的我个人比较喜欢收缩着看,比较简洁,看这里点它- Package Presentation – Hierarchial,就变成这样这样命名有自己的含义,我打算inter包专门放接口(Interface),model包放Bean,test包放测试类。
创建一个叫mybatis的数据库,在里面创建一个表叫user,表user的结构如下懒人请复制:CREATE TABLE IF NOT EXISTS `user` (`id` int(11) NOT NULL AUTO_INCREMENT,`userName` varchar(50) DEFAULT NULL,`userAge` int(11) DEFAULT NULL,`userAddress` varchar(200) DEFAULT NULL,PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=7 ; 顺便弄写数据进去INSERT INTO `user` (`id`, `userName`, `userAge`, `userAddress`) VALUES (1, '余小龙', 10, '人民广场'),(3, 'lisiwei', 80, '中山大学南方学院123'),(5, '麦家潮', 20, '中国'),(6, '周杰伦', 30, '北京');在包model下创建一个User类,根据数据库表在类中创建相应的成员变量,如下:private int id;private String userName;private String userAge;private String userAddress;右击鼠标——Source——Generate Getter and Setter点全选——OK,变成这样子创建完User类,接下来在同一个包(model)下创建一个User.xml文件,填以下内容:头部的声明代码太麻烦?懒人请复制<!DOCTYPE mapper PUBLIC"-////DTD Mapper 3.0//EN" "/dtd/mybatis-3-mapper.dtd">接下来,定义一个查询方法,根据用户ID查询User表中的某一条记录,在<mapper></mapper>里面写<select>标签是MyBatis的查询标签,id=”selectUserById”随便改,但是,要记住哦,等下会用到的parameterType是参数类型的意思,resultType是结果类型的意思,把查询的结果封装成一个User对象,有人问过我,为什么我经常在一些表名两边加上反冒号`,如:,知道的请跳过以下内容:在mysql中,有些关键字是不能用的,例如order、database、table等等,我在表名user两端加上`,作用就是告诉mysql,我写这个user不是想要调用mysql关键字,这个user仅仅代表我自己定义的数据库表名,mysql的关键字太多,我不能确定user是不是其中之一,不想去查,所以加上``了事,那么mysql 就不管user是不是mysql关键字,就算不小心user真的是关键字,也当user 不起作用,忽略它。
Parch系列 - MyBatis学习笔记
3,不使用 XML 构建 SqlSessionFactory
从 Java 程序而非 XML 文件中直接创建配置实例,或创建配置构建器: DataSource dataSource = BlogDataSourceFactory.getBlogDataSource(); TransactionFactory transactionFactory = new JdbcTransactionFactory(); Environment environment = new Environment("development", transactionFactory, dataSource);
(3)XML 配置文件介绍 XML 配置文件包含对 MyBatis 系统的核心设置,包含获取数据库连接实例的数据源和决定事务范
围和控制的事务管理器。 示例: <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-////DTD Config 3.0//EN" &ig.dtd"> <configuration> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <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> <mapper resource="org/mybatis/example/BlogMapper.xml"/> </mappers> </configuration> XML 头部的声明,需要用来验证 XML 文档正确性。environment 元素体中包含对事务管理和连
MyBatis学习总结
MyBatis学习总结(一)——MyBatis快速入门一、Mybatis介绍MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架。
MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装。
MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO (Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。
二、mybatis快速入门2.1、准备开发环境1、创建测试项目,普通java项目或者是JavaWeb项目均可,如下图所示:2、添加相应的jar包【mybatis】mybatis-3.1.1.jar【MYSQL驱动包】mysql-connector-java-5.1.7-bin.jar3、创建数据库和表,针对MySQL数据库SQL脚本如下:1createdatabase mybatis;2use mybatis;3CREATETABLE users(id INTPRIMARYKEY AUTO_INCREMENT, NAME VARCHAR(20), age INT);4INSERTINTO users(NAME, age) VALUES('孤傲苍狼', 27);5INSERTINTO users(NAME, age) VALUES('白虎神皇', 27);将SQL脚本在MySQL数据库中执行,完成创建数据库和表的操作,如下:到此,前期的开发环境准备工作全部完成。
2.2、使用MyBatis查询表中的数据1、添加Mybatis的配置文件conf.xml在src目录下创建一个conf.xml文件,如下图所示:conf.xml文件中的内容如下:1<?xml version="1.0" encoding="UTF-8"?>2<!DOCTYPE configuration PUBLIC "-////DTD Config 3.0//EN" "/dtd/mybatis-3-config.dtd">3<configuration>4<environments default="development">5<environment id="development">6<transactionManager type="JDBC"/>7<!-- 配置数据库连接信息 -->8<dataSource type="POOLED">9<property name="driver" value="com.mysql.jdbc.Driver"/>10<property name="url" value="jdbc:mysql://localhost:3306/mybatis"/> 11<property name="username" value="root"/>12<property name="password" value="XDP"/>13</dataSource>14</environment>15</environments>1617</configuration>2、定义表所对应的实体类,如下图所示:User类的代码如下:1package me.gacl.domain;23/**4 * @author gacl5 * users表所对应的实体类6*/7publicclass User {89//实体类的属性和表的字段名称一一对应10privateint id;11private String name;12privateint age;1314publicint getId() {15return id;16 }1718publicvoid setId(int id) {19this.id = id;20 }2122public String getName() {23return name;24 }2526publicvoid setName(String name) { = name;28 }2930publicint getAge() {31return age;32 }3334publicvoid setAge(int age) {35this.age = age;36 }3738 @Override39public String toString() {40return "User [id=" + id + ", name=" + name + ", age=" + age + "]";41 }42 }3、定义操作users表的sql映射文件userMapper.xml创建一个me.gacl.mapping包,专门用于存放sql映射文件,在包中创建一个userMapper.xml文件,如下图所示:userMapper.xml文件的内容如下:1<?xml version="1.0" encoding="UTF-8" ?>2<!DOCTYPE mapper PUBLIC "-////DTD Mapper 3.0//EN""/dtd/mybatis-3-mapper.dtd">3<!-- 为这个mapper指定一个唯一的namespace,namespace的值习惯上设置成包名+sql映射文件名,这样就能够保证namespace的值是唯一的4例如namespace="erMapper"就是me.gacl.mapping(包名)+userMapper(userMapper.xml文件去除后缀)5-->6<mapper namespace="erMapper">7<!-- 在select标签中编写查询的SQL语句,设置select标签的id属性为getUser,id属性值必须是唯一的,不能够重复8使用parameterType属性指明查询时使用的参数类型,resultType属性指明查询返回的结果集类型9 resultType="er"就表示将查询结果封装成一个User类的对象返回10 User类就是users表所对应的实体类11-->12<!--13根据id查询得到一个user对象14-->15<select id="getUser" parameterType="int"16 resultType="er">17 select * from users where id=#{id}18</select>19</mapper>4、在conf.xml文件中注册userMapper.xml文件1<?xml version="1.0" encoding="UTF-8"?>2<!DOCTYPE configuration PUBLIC "-////DTD Config 3.0//EN""/dtd/mybatis-3-config.dtd">3<configuration>4<environments default="development">5<environment id="development">6<transactionManager type="JDBC"/>7<!-- 配置数据库连接信息 -->8<dataSource type="POOLED">9<property name="driver" value="com.mysql.jdbc.Driver"/>10<property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>11<property name="username" value="root"/>12<property name="password" value="XDP"/>13</dataSource>14</environment>15</environments>1617<mappers>18<!-- 注册userMapper.xml文件,19 userMapper.xml位于me.gacl.mapping这个包下,所以resource写成me/gacl/mapping/userMapper.xml-->20<mapper resource="me/gacl/mapping/userMapper.xml"/>21</mappers>2223</configuration>5、编写测试代码:执行定义的select语句创建一个Test1类,编写如下的测试代码:package me.gacl.test;import java.io.IOException;import java.io.InputStream;import java.io.Reader;import er;import org.apache.ibatis.io.Resources;import org.apache.ibatis.session.SqlSession;import org.apache.ibatis.session.SqlSessionFactory;import org.apache.ibatis.session.SqlSessionFactoryBuilder;publicclass Test1 {publicstaticvoid main(String[] args) throws IOException {//mybatis的配置文件String resource = "conf.xml";//使用类加载器加载mybatis的配置文件(它也加载关联的映射文件)InputStream is =Test1.class.getClassLoader().getResourceAsStream(resource);//构建sqlSession的工厂SqlSessionFactory sessionFactory = newSqlSessionFactoryBuilder().build(is);//使用MyBatis提供的Resources类加载mybatis的配置文件(它也加载关联的映射文件) //Reader reader = Resources.getResourceAsReader(resource);//构建sqlSession的工厂//SqlSessionFactory sessionFactory = newSqlSessionFactoryBuilder().build(reader);//创建能执行映射文件中sql的sqlSessionSqlSession session = sessionFactory.openSession();/*** 映射sql的标识字符串,* erMapper是userMapper.xml文件中mapper标签的namespace属性的值,* getUser是select标签的id属性值,通过select标签的id属性值就可以找到要执行的SQL*/String statement = "erMapper.getUser";//映射sql的标识字符串//执行查询返回一个唯一user对象的sqlUser user = session.selectOne(statement, 1);System.out.println(user);}}执行结果如下:可以看到,数据库中的记录已经成功查询出来了。
mybatis使用教程
Mybatis框架什么是 MyBatis ?MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架。
MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。
MyBatis 可以对配置和原生Map 使用简单的 XML 或注解,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java 对象)映射成数据库中的记录。
1.下面采用web项目来简单展示实现Mybatis的使用首先建立一个web项目,项目建立成功后引入所需要的jar包,mybatis-3.1.1.jar(mybatis 架包)、mysql-connector-java-5.1.18-bin.jar(mysql数据库jar包)创建数据库mybatis,然后创建表users目录结构如下:(最好把UserMapper.xml文件和UserDao.java接口放在一个包下)然后创建与表对应的JavaBean对象public class User {private int id;private String userName;private int age;public int getId(){return id;}public void setId(int id){this.id = id;}public String getuserName(){return userName;}public void setuserName(String userName){erName = userName;}public int getAge(){return age;}public void setAge(int age){this.age = age;}public String toString(){return"User[id="+id+",userName="+userName+",age="+age+"]";}}接下来在resources包下面创建配置mybatis-config.xml文件,包括类型的别名<?xml version="1.0"encoding="UTF-8"?><!DOCTYPE configuration PUBLIC"-////DTD Config3.0//EN""/dtd/mybatis-3-config.dtd"><configuration><!-- 别名标签,为实体类取别名为user--><typeAliases><typeAlias alias="user"type="er"/> </typeAliases><environments default="development"><environment id="development"><!-- 事务管理 --><transactionManager type="JDBC"/><!-- 配置数据库连接信息 --><dataSource type="POOLED"><property name="driver"value="com.mysql.jdbc.Driver"></property><property name="url"value="jdbc:mysql://localhost:3306/mybatis"></property><property name="username"value="root"></property><property name="password"value="123456"></property></dataSource></environment></environments><mappers><!-- 注册userMapper.xml文件,具体定位使用的是包名/userMapper.xml--><mapper resource="com/lisoft/util/userMapper.xml"/> </mappers></configuration>通过mybatis-config.xml中<mapper resource="com/lisoft/util/userMapper.xml"/>配置项,我们在包com.lisoft.util下面创建文件userMapper.xml内容如下:配置resultMap防止实体类的属性名称与表中字段的名称不一样出错的情况<?xml version="1.0"encoding="UTF-8"?><!DOCTYPE mapper PUBLIC"-////DTD Mapper 3.0//EN" "/dtd/mybatis-3-mapper.dtd"><!-- 为这个mapper指定唯一的namespace,namespace的值习惯上设置成包名+sql映射文件名,这样保证namespace的值的唯一性例如例如namespace="erMapper"就是com.lisoft.util(包名)+userMapper(userMapper.xml文件去除后缀) --> <mapper namespace="erMapper"><!-- 进行表关系映射,为了防止实体属性与表字段不一样时出错type="user"中user为实体类的别名 --><resultMap id="userResultMap"type="user"><!-- 配置信息id:为查询列指定的唯一标识,如果有多个列组成的唯一标识,配置多个idcolumn:数据库表中的列property:映射到实体的属性--><id property="id"column="id"/><result property="userName"column="name"/><result property="age"column="age"/></resultMap><!-- 在select标签中编写查询到的sql语句,设置select的id属性为getUser,id属性必须是唯一的不能够重复,使用parameterType属性指明查询时使用的参数类型,resultType指明查询时返回的结果集类型,resultType="user"就是表示将查询结果封装成一个User类对象进行返回(此时是用的实体类的别名)--><!-- <select id="getUser" parameterType="int"resultType="user">select * from users where id=#{id}</select> --><!-- resultMap表示对应实体,名称是resultMap标签的id值 --><select id="getUser"parameterType="int"resultMap="userResultMap">select * from users where id=#{id}</select><!-- 增加操作userGeneratedKeys设置为true时表示字段自动递增,如果不想使用自动递增就去掉keyProperty对应的是Java类里面的属性,而非表里面的字段--> <insert id="addUser"parameterType="user" useGeneratedKeys="true"keyProperty="id">insert into users(id,name,age)values(#{id},#{userName},#{age})</insert><!-- 更新操作 --><update id="updateUser"parameterType="user">update users set name=#{userName},age=#{age} where id=#{id} </update><!-- 删除操作 --><delete id="deleteUser"parameterType="int">delete from users where id=#{id}</delete></mapper>编写测试代码:/*** mybatis查询测试*/@WebServlet("/TestServlet")public class TestServlet extends HttpServlet {private static final long serialVersionUID = 1L;public TestServlet() {super();}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {PrintWriter out = response.getWriter();//获取输出流对象//mybatis的配置文件String resource = "resources/mybatis-config.xml";//使用类加载器加载mybatis的配置文件(它也加载关联的配置文件)InputStream in = TestServlet.class.getClassLoader().getResourceAsStream(resourc e);//构建sqlSession的工厂SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(in);//创建能执行映射文件sql的SQLSessionSqlSession session = sessionFactory.openSession();/*** 映射sql的标识符字符串:* erMapper是userMapper.xml文件中mapper 标签的namespace属性值,* getUser是select标签的id的属性值,通过Select标签的id属性值就可以找到要执行的sql*///在命名空间"erMapper"中定义一个名为getUser的映射语句//这样他就允许你使用指定的完全限定名"resources.getUser"来调用映射语句//格式:命名空间(namespace)+映射语句名(id)String statement = "erMapper";//映射sql 的标识字符串//执行查询返回一个user对象的sql(查询操作)User user = session.selectOne(statement+".getUser",2);System.out.println(user.getuserName());//插入操作User addUser = new User();//实例化实体类对象addUser.setuserName("全能冰皇");addUser.setAge(23);//session.insert(statement+".addUser", addUser);//修改操作User updateUser = new User();updateUser.setId(4);updateUser.setuserName("KULi");updateUser.setAge(32);//session.update(statement+".updateUser",updateUser);//删除操作//int i = session.delete(statement+".deleteUser",4);mit();//提交事物否则增删改无效}protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException,IOException {doGet(request, response);}}2.表关系实现多对一首先在数据库中建立表usres(一)和mobile(多)Usres表Mobile表创建对应的javaBean对象(多对一关系在多方添加一方的实体属性)User对象:public class User {private int id;private String userName;private int age;public int getId(){return id;}public void setId(int id){this.id = id;}public String getuserName(){return userName;}public void setuserName(String userName){erName = userName;}public int getAge(){return age;}public void setAge(int age){this.age = age;}public String toString(){return"User[id="+id+",userName="+userName+",age="+age+"]";}}Mobile对象:public class Mobile {private int id;private String telnumber;//在多方的实体配置一方的实体属性private User users;public int getId(){return id;}public void setId(int id){this.id = id;}public String getTelnumber(){return telnumber;}public void setTelnumber(String telnumber){this.telnumber = telnumber;}public User getUser(){return users;}public void setUser(User users){ers = users;}}对应的表的映射文件:userMapper.xml此时可以省略不写,这里主要是用多方的进行操作mobileMapper.xml配置如下:<?xml version="1.0"encoding="UTF-8"?><!DOCTYPE mapper PUBLIC"-////DTD Mapper 3.0//EN" "/dtd/mybatis-3-mapper.dtd"><!-- mappre的命名空间可以随意的命名但是一般遵循包名(com.lisoft.util).类名的xml文件名(mobileMapper) --><mapper namespace="com.lisoft.util.mobileMapper"><!-- type是实体类的别名,id为找到resultMap的标识 --><resultMap id="mobileResultMap"type="mobile"><id property="id"column="id"/><result property="telnumber"column="telnumber"/><!-- 配置多对一关系javaType的值为User类的别名也可以写成er --><association property="users"javaType="user"><id property="id"column="id"></id><result property="userName"column="name"/><result property="age"column="age"></result> </association></resultMap><!-- 多表查询操作 --><!-- parameterType指明查询时使用的参数类型 --><select id="selectMobile"parameterType="int"resultMap="mobileResultMap"><!-- (写字段的形式查出来id的值为零)分别为mobile的主键id与user的主键id赋值别名,避免因为两个表字段相同而注入到对应对象冲突 --> <!-- SELECT m.id m_id,m.telnumber,u.id u_id,,u.age FROM mobile m,users u WHERE u.id=erid AND m.id=#{id} --> <!-- 这样写的查出来的数据才完整 -->SELECT * FROM mobile m,users u WHERE u.id=erid AND m.id=#{id}</select></mapper>mybatis-config.xml文件配置如下:<?xml version="1.0"encoding="UTF-8"?><!DOCTYPE configuration PUBLIC"-////DTD Config3.0//EN""/dtd/mybatis-3-config.dtd"><configuration><!-- 别名标签,为实体类取别名为user--><typeAliases><typeAlias alias="user"type="er"/><typeAlias alias="mobile"type="com.lisoft.util.Mobile"></typeAlias><environments default="development"><environment id="development"><!-- 事务管理 --><transactionManager type="JDBC"/><!-- 配置数据库连接信息 --><dataSource type="POOLED"><property name="driver"value="com.mysql.jdbc.Driver"></property><property name="url"value="jdbc:mysql://localhost:3306/mybatis"></property><property name="username"value="root"></property><property name="password"value="123456"></property></dataSource></environment></environments><mappers><!-- 注册userMapper.xml文件,具体定位使用的是包名/userMapper.xml--><mapper resource="com/lisoft/util/userMapper.xml"/><!-- 映射mobileMapper.xml文件实现多对一查询 --><mapper resource="com/lisoft/util/mobileMapper.xml"/> </mappers></configuration>编写测试验证多对一关系:@WebServlet("/ManyToOne")public class ManyToOneTestServlet extends HttpServlet { private static final long serialVersionUID = 1L;public ManyToOneTestServlet() {super();// TODO Auto-generated constructor stub}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {PrintWriter out = response.getWriter();//获取输出流对象//获取mybatis配置文件String config = "resources/mybatis-config.xml";//使用类加载器加载配置文件InputStream in = ManyToOneTestServlet.class.getClassLoader().getResourceAsStrea m(config);//构建sqlSession工厂SqlSessionFactory SessionFactory = new SqlSessionFactoryBuilder().build(in);//创建能执行映射文件的sql的sqlSessionSqlSession sqlSession = SessionFactory.openSession();//映射sql标识符字符串,定位到配置文件里面的配置的id属性String statement = "com.lisoft.util.mobileMapper.selectMobile";//执行一个返回mobileMobile mobile = sqlSession.selectOne(statement, 1);//通过多方的条件查询出对应的一方的信息System.out.println(mobile.getId()+mobile.getTelnumber()+mob ile.getUser());}protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}}3.表关系实现一对多首先创建表parent(代表一方的表)和son(代表多方的表)Parent表:Son表:创建JavaBean实体对象Parent实体:(在一方配置多方的集合对象)public class Parent {private int id;private String name;private List<Son> sons;//在一方配置多方的集合对象,此处也可以用setpublic int getId(){return id;}public void setId(int id){this.id = id;}public String getName(){return name;}public void setName(String name){ = name;}public List<Son> getSons(){return sons;}public void setSons(List<Son> sons){this.sons = sons;}}Son实体类:(代表多方的实体)public class Son {private int ids;private String sonName;public int getids(){return ids;}public void setids(int ids){this.ids = ids;}public String getSonName(){return sonName;}public void setSonName(String sonName){this.sonName = sonName;}}parentMapper.xml文件(在一方配置多方的集合此时必须要保证两个id的名称不一样否者查出来的只有一条)<?xml version="1.0"encoding="UTF-8"?><!DOCTYPE mapper PUBLIC"-////DTD Mapper 3.0//EN" "/dtd/mybatis-3-mapper.dtd"><!-- 命名空间namespace随意命名一般使用类名(com.lisoft.util).相应的xml文件名(parentMapper)--><mapper namespace="com.lisoft.util.parentMapper"><!-- 进行表字段的映射为了防止实体的属性名和数据库字段不一样而出现错误type:取得是实体类的别名--><resultMap id="parentResultMap"type="Parent"><!-- property是Java实体类的属性名关联到表字段名 --><id property="id"column="id"javaType="int"jdbcType="INTEGER"/><result property="name"column="name"javaType="String" jdbcType="VARCHAR"/><!-- 配置一对多的对应关系JavaType对象的类型ofType指定集合中元素的类型即是泛型,当使用反向查询从一个mapper 中取出数据时必须用ofTypeproperty指定实体类里面的属性(多方的id值要有别于一方的id值否则查出来的只有一条) --><collection property="sons"column="parentid"ofType="Son"><id property="ids"column="ids"javaType="int" jdbcType="INTEGER"/><result property="sonName"column="sonname"javaType="String"jdbcType="VARCHAR"/></collection></resultMap><!-- 查询时一方的id作为条件,parameterType查询时使用的参数类型(返回一个list结果)--><select id="getOneToMany"parameterType="int"resultMap="parentResultMap"><!-- SELECT p.id,,s.id,s.sonname,s.parentid FROM parent as p,son as s WHERE p.id = s.parentid and p.id=#{id}--> SELECT * FROM parent as p,son as s WHERE p.id = s.parentid and p.id=#{id}</select></mapper>sonMapper.xml文件(由于是一对多关系此时多方的可以省略不写)<?xml version="1.0"encoding="UTF-8"?><!DOCTYPE mapper PUBLIC"-////DTD Mapper 3.0//EN" "/dtd/mybatis-3-mapper.dtd"><!-- 命名空间的属性规则是包名(com.lisoft.util).xml文件名(sonMapper)--><mapper namespace="com.lisoft.util.sonMapper"><!-- type是实体类的别名,id为找到resultMap的标识 --><resultMap id="sonResultMap"type="son"><id property="ids"column="ids"/><result property="sonName"column="sonname"/></resultMap></mapper>mybatis-config.xml配置文件<?xml version="1.0"encoding="UTF-8"?><!DOCTYPE configuration PUBLIC"-////DTD Config3.0//EN""/dtd/mybatis-3-config.dtd"><configuration><!-- 别名标签,为实体类取别名为user--><typeAliases><typeAlias alias="parent"type="com.lisoft.util.Parent"></typeAlias><typeAlias alias="son"type="com.lisoft.util.Son"></typeAlias></typeAliases><environments default="development"><environment id="development"><!-- 事务管理 --><transactionManager type="JDBC"/><!-- 配置数据库连接信息 --><dataSource type="POOLED"><property name="driver"value="com.mysql.jdbc.Driver"></property><property name="url"value="jdbc:mysql://localhost:3306/mybatis"></property><property name="username"value="root"></property><property name="password"value="123456"></property></dataSource></environment></environments><mappers><!-- 注册userMapper.xml文件,具体定位使用的是包名/userMapper.xml--><!-- 映射parentMapper.xml文件和sonMapper.xml一块实现一对多关系 --><mapper resource="com/lisoft/util/parentMapper.xml"/><!-- 映射sonMapper.xml文件 --><mapper resource="com/lisoft/util/sonMapper.xml"/> </mappers></configuration>测试一对多关系:@WebServlet("/OneToMany")public class OneToManyTestServlet extends HttpServlet { private static final long serialVersionUID = 1L;public OneToManyTestServlet() {super();}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//maybatis配置文件地址String config = "resources/mybatis-config.xml";//使用类加载器加载配置文件InputStream in =OneToManyTestServlet.class.getClassLoader().getResourceAsStrea m(config);//创建sqlSession的工厂SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(in);//创建执行映射文件sql的sqlSessionSqlSession session = sessionFactory.openSession();//定位执行的sql语句(包名+实体类xml映射文件的名(parentMapper)+sql语句的位置(例如查询标签的id)String statement ="com.lisoft.util.parentMapper.getOneToMany";//执行查询返回一个Parent对象//Parent parent = session.selectOne(statement, 1);List<Parent> parent = session.selectList(statement, 1);for(int i=0;i<parent.size();i++){for(int j=0;j<parent.get(i).getSons().size();j++){ System.out.println(parent.get(i).getSons().get(j).getSonNam e());}}}protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}}4.把mybatis与spring框架整合目录结构:创建数据库表:Son对应数据库表的实体类:public class Son {private int ids;private String sonName;public int getId(){return ids;}public void setId(int ids){this.ids = ids;}public String getSonName(){return sonName;}public void setSonName(String sonName){this.sonName = sonName;}}用于数据库操作sql的sonMapper.xml文件:<?xml version="1.0"encoding="UTF-8"?><!DOCTYPE mapper PUBLIC"-////DTD Mapper 3.0//EN" "/dtd/mybatis-3-mapper.dtd"><!-- mybatis与spring整合使用时,namespace的值要定位到接口 --> <mapper namespace="com.lisoft.dao.SonMapper"><!-- resultMap使得实体类与表相关联, --><resultMap type="sons"id="sonResultMap"><id property="ids"column="ids"/><result property="sonName"column="sonname"/> </resultMap><!-- 查询整张表的方法 --><select id="getSon"resultMap="sonResultMap">select * from son</select><!-- 带查询条件的查询方法 --><select id="getSonById"parameterType="int"resultMap="sonResultMap">select * from son where ids = #{ids}</select></mapper>applicationContext.xml核心配置文件<?xml version="1.0"encoding="UTF-8"?><beans xmlns="/schema/beans"xmlns:xsi="/2001/XMLSchema-instance"xmlns:p="/schema/p"xmlns:context="/schema/context"xmlns:mvc="/schema/mvc"xsi:schemaLocation="/schema/beans/schema/beans/spring-beans-3.1.xsd/schema/context/schema/context/spring-context-3.1.xsd/schema/mvc /schema/mvc/spring-mvc-4.0.xsd"> <description>Spring Context</description><!-- 读取jdbc.properties配置文件 --><context:property-placeholderlocation="classpath:resources/jdbc.properties"/><!-- 配置数据库连接池信息 --><bean id="c3p0Source"class="boPooledDataSource"><property name="driverClass"value="${jdbc.driver}"/><!-- 基本属性 url、user、password --><property name="jdbcUrl"value="${jdbc.url}"/><property name="user"value="${er}"/><property name="password"value="${jdbc.password}"/> </bean><bean id="sqlSessionFactory"class="org.mybatis.spring.SqlSessionFactoryBean"><!-- dataSource属性指定要用到的数据库连接池c3p0Source --><property name="dataSource"ref="c3p0Source"/><!-- 指定mybatis的核心配置文件 --><property name="configLocation"value="classpath:resources/mybatis-config.xml"/></bean><bean id="sonMappers"class="org.mybatis.spring.mapper.MapperFactoryBean"><!-- sqlSessionFactory属性指定要用到的SQLSessionFactory实例(name属性固定) --><property name="sqlSessionFactory"ref="sqlSessionFactory"/><!-- MapperInterface属性指定映射接口,用于实现此接口并生成映射器对象(name属性是固定的) --><property name="mapperInterface"value="com.lisoft.dao.SonMapper"/></bean><!-- 把SonMapper接口注入到SonService中 --><bean id="sonService"class="com.lisoft.service.SonService"> <!-- name属性值为service里面对应的相应的set的方法名 --><property name="sons"ref="sonMappers"/><property name="sonById"ref="sonMappers"/></bean></beans>mybatis-config.xml配置文件<?xml version="1.0"encoding="UTF-8"?><!DOCTYPE configuration PUBLIC"-////DTD Config3.0//EN""/dtd/mybatis-3-config.dtd"><configuration><!-- 为实体类配置别名 --><typeAliases><typeAlias alias="sons"type="com.lisoft.entity.Son"></typeAlias></typeAliases><!-- 映射实体类xml文件 --><mappers><mapper resource="com/lisoft/entity/sonMapper.xml"/> </mappers></configuration>jdbc.properties配置文件#-----oracle数据库连接-------------------#jdbc.driver=oracle.jdbc.driver.OracleDriver#jdbc.url=jdbc:oracle:thin:@127.0.0.1:1521:orcl#er=car#jdbc.password=123456#-----MySql数据库连接--------------------jdbc.driver=com.mysql.jdbc.Driverjdbc.url=jdbc:mysql://localhost:3306/mybatis?useUnicode=true&c haracterEncoding=utf8er=rootjdbc.password=123456Dao层实体类接口:保证接口里面的方法和sonMapper.xml文件里面配置的增删改查标签里面的id属性一样。
mybatis总结
mybatis总结Mybatis总结。
Mybatis是一款优秀的持久层框架,它简化了数据库操作的过程,提高了开发效率。
在实际项目中,我们经常会用到Mybatis来进行数据库操作,因此对Mybatis的总结和学习是非常重要的。
接下来,我将对Mybatis进行一些总结和介绍。
首先,Mybatis的核心是SQL映射文件。
在这个文件中,我们可以编写SQL语句,以及定义参数和返回结果的映射关系。
这样一来,我们就可以通过调用Mybatis的API来执行这些SQL语句,从而实现对数据库的操作。
这种将SQL语句和Java代码分离的方式,使得我们可以更加灵活地管理和维护SQL语句,也更容易进行数据库的迁移和优化。
其次,Mybatis提供了丰富的映射功能。
我们可以通过配置文件来定义各种复杂的映射关系,包括一对一、一对多、多对一、多对多等关系。
这样一来,我们就可以很方便地进行对象之间的关联查询,而不必手动编写复杂的SQL语句。
同时,Mybatis还支持动态SQL,可以根据条件动态拼接SQL语句,大大提高了SQL语句的复用性和可维护性。
另外,Mybatis还提供了缓存功能。
在实际项目中,我们经常会遇到一些需要频繁访问的数据,如果每次都去数据库查询,会影响系统的性能。
而Mybatis的缓存功能可以将查询结果缓存起来,当下次再次查询相同的数据时,就可以直接从缓存中获取,避免了对数据库的频繁访问,提高了系统的性能。
最后,Mybatis还支持插件功能。
通过插件,我们可以在Mybatis的执行过程中加入自定义的逻辑,比如对SQL语句进行拦截修改,对查询结果进行加工处理等。
这样一来,我们就可以很方便地扩展Mybatis的功能,满足项目中的特定需求。
总的来说,Mybatis是一个功能强大、灵活性高的持久层框架,它的设计理念和丰富的功能使得我们在实际项目中能够更加高效地进行数据库操作。
通过对Mybatis的总结和学习,我们可以更加深入地理解它的原理和使用方法,从而更好地应用到实际项目中去。
mybatis语法和介绍详细
一、MyBatis简介与配置MyBatis+Spring+MySql1.1MyBatis简介MyBatis 是一个可以自定义SQL、存储过程和高级映射的持久层框架。
MyBatis 摒除了大部分的JDBC 代码、手工设置参数和结果集重获。
MyBatis 只使用简单的XML 和注解来配置和映射基本数据类型、Map 接口和POJO 到数据库记录。
相对Hibernate和Apache OJB等“一站式”ORM解决方案而言,Mybatis 是一种“半自动化”的ORM实现。
需要使用的Jar包:mybatis-3.0.2.jar(mybatis核心包)。
mybatis-spring-1.0.0.jar(与Spring结合包)。
下载地址:1.2MyBatis+Spring+MySql简单配置1.2.1搭建Spring环境1,建立maven的web项目;2,加入Spring框架、配置文件;3,在pom.xml中加入所需要的jar包(spring框架的、mybatis、mybatis-spring、junit等);4,更改web.xml和spring的配置文件;5,添加一个jsp页面和对应的Controller;6,测试。
可参照:。
使用Eclipse的Maven构建SpringMVC项目1.2.2建立MySql数据库建立一个学生选课管理数据库。
表:学生表、班级表、教师表、课程表、学生选课表。
逻辑关系:每个学生有一个班级;每个班级对应一个班主任教师;每个教师只能当一个班的班主任;使用下面的sql进行建数据库,先建立学生表,插入数据(2条以上)。
更多sql请下载项目源文件,在resource/sql中。
Sql代码1./* 建立数据库 */2.CREATE DATABASE STUDENT_MANAGER;E STUDENT_MANAGER;4.5./***** 建立student表 *****/6.CREATE TABLE STUDENT_TBL7.(8. STUDENT_ID VARCHAR(255) PRIMARY KEY,9. STUDENT_NAME VARCHAR(10) NOT NULL,10. STUDENT_SEX VARCHAR(10),11. STUDENT_BIRTHDAY DATE,12. CLASS_ID VARCHAR(255)13.);14.15./*插入学生数据*/16.INSERT INTO STUDENT_TBL (STUDENT_ID,17. STUDENT_NAME,18. STUDENT_SEX,19. STUDENT_BIRTHDAY,20. CLASS_ID)21.VALUES (123456,22.'某某某',23.'女',24.'1980-08-01',25. 12154626. )创建连接MySql使用的配置文件mysql.properties。
mybatis使用原理
mybatis使用原理
MyBatis是一款开源的基于Java的持久层框架,它是一款优秀的ORM框架。
MyBatis的使用原理主要是基于三个部分:映射文件、数据源和执行器。
首先我们需要编写映射文件,这个文件主要是定义了数据库中的表和业务对象之间的映射关系。
在映射文件中,我们可以定义SQL语句,以及SQL语句中的参数和返回值类型等信息。
接着,我们需要配置数据源,也就是告诉MyBatis我们要访问哪个数据库,以及数据库的连接信息等。
在配置数据源时,我们一般会使用JNDI或者直接使用DataSource的方式。
最后,我们需要使用MyBatis提供的执行器来执行SQL语句,从而完成对数据库的操作。
执行器主要是负责组装SQL语句,并将SQL 语句发送到数据库服务器执行,并解析执行结果,最终将结果返回给应用程序。
总的来说,MyBatis的使用原理是通过映射文件、数据源和执行器这三个部分的配合使用,来实现对数据库的访问和操作。
在使用MyBatis时,我们只需要关注业务逻辑,而不需要过多关注数据库操作。
- 1 -。
mybatis教案
mybatis教案一、课程目标1. 了解 MyBatis 的基本概念和架构。
2. 掌握 MyBatis 的配置和映射文件的编写。
3. 学习使用MyBatis 进行数据库操作,包括增删改查等基本操作。
4. 理解 MyBatis 的缓存机制和分页功能。
5. 能够使用 MyBatis 集成 Spring 框架进行开发。
二、教学内容1. MyBatis 简介- MyBatis 的特点和优势。
- MyBatis 与其他 ORM 框架的比较。
2. MyBatis 架构- MyBatis 的核心组件介绍。
- MyBatis 的工作原理。
3. MyBatis 配置- MyBatis 配置文件的结构和常用配置项。
- 使用 XML 或注解方式配置数据源、映射文件等。
4. MyBatis 映射文件- 映射文件的作用和语法。
- 主键、列、结果集、关联映射等的配置。
5. MyBatis 数据库操作- 使用 MyBatis 进行增删改查操作的示例。
- 参数传递和动态 SQL 的使用。
6. MyBatis 缓存机制- 一级缓存和二级缓存的原理和配置。
- 缓存的使用场景和注意事项。
7. MyBatis 分页功能- 分页的原理和实现方式。
- 使用 MyBatis 分页插件的配置和使用。
8. MyBatis 与 Spring 整合- Spring 容器中管理 MyBatis 配置和映射文件。
- 使用 Spring 注解实现数据访问。
9. 综合实例- 通过一个完整的项目案例,演示MyBatis 在实际开发中的应用。
10. 总结与展望- 总结课程内容,回顾重点知识。
- 介绍 MyBatis 的发展趋势和应用前景。
三、教学方法1. 理论讲解:通过幻灯片、文档等形式,讲解 MyBatis 的相关概念、架构和原理。
2. 实例演示:通过实际项目案例,演示 MyBatis 的配置、映射文件编写和数据库操作。
3. 动手实践:安排学生在实验环境中进行实际操作,巩固所学知识。
mybatis从入门到精通
1、对原生态的jdbc程序问题总结1.1 jdbc程序:使用jdbc查询mysql数据库中用户表的记录1.2 问题:1)数据库连接使用时创建、不使用时就释放:对数据库进行频繁的连接的创建和释放,造成数据库资源浪费,影响数据库性能---------------使用数据库连接池管理数据库连接2)将sql语句硬编码到java代码中,如果sql语句修改,需要重新编译java 代码,不利于系统维护-------------将sql语句配置在xml配置文件中,即使sql变化,不需要对java代码进行重新编译3)向prepareStatement中设置参数,对占位符号位置和设置参数值,硬编码在java代码中,不利于系统维护-------------------将sql语句及占位符和参数全部配置在xml文件中4)从resultSet中遍历结果集数据时,存在硬编码,将获取表的字段进行硬编码,不利于系统维护----------------------将结果集自动映射成java对象2、mybatis框架原理2.1 mybatis是什么?mybatis是一个持久层框架,是apache下的顶级项目github下:https:///mybatis/mybatis-3/releasesmybatis让程序员将主要精力放在sql上,通过mybatis提供的映射方式,自由灵活生成满足sql需要的sql语句mybatis可以将向preparestatement输入的参数自动进行输入映射,将查询结果集灵活映射成java对象(输出映射)。
2.2 mybatis框架\3、mybatis入门程序3.1 需求根据主键查询用户信息根据用户名模糊查询用户信息怎删改查.....3.2 mybati运行环境(jar包):从https:///mybatis/mybatis-3/releases 下载lib下:依赖包mybatis-3.4.1.jar:核心包3.3 log4j.propertie s#Global logging configurationlog4j.rootLogger=ERROR, stdout#MyBatis logging configuration....mybatis.example.BlogMapper=TRACE#Console output...log4j.appender.stdout=org.apache.log4j.ConsoleAppenderyout=org.apache.log4j.PatternLayoutyout.ConversionPattern=%5p[%t]-%m%n3.4 工程目录结构3.5 根据用户id查询用户信息、通过用户名模糊查询用户信息3.5.1 编写映射文件(包括对应的实体类:User.java)映射文件命名:User.xml(原始的ibatis命名方式),mapper代理的映射文件名称叫做XXXMapper.xml<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE mapperPUBLIC "-////DTD Mapper 3.0//EN""/dtd/mybatis-3-mapper.dtd"><!--namespace命名空间,作用就是对sql进行分类化管理,理解sql隔离注意:将来如果使用mapper代理方法开发,namespace有特殊作用--><mapper namespace="test"><!--在映射文件中配置许多sql语句--><!--通过select执行数据库查询,id:标识映射文件中的sql,成为statement的id,将sql语句封装到mapperStatement对象中,所以将id成为statement的idparameterType:输入参数的类型#{}:表示一个占位符#{id}:其中id表示输入的参数,参数名就是id,如果输入参数是简单类型,#{}中的参数名可以任意resultType:指定sql输出结果所映射的对象类型--><select id="findUserById" parameterType="int"resultType="er">SELECT * FROM USER WHERE uid=#{id}</select><!--${}:表示拼接sql串,将接收到的参数的内容不加任何修饰拼接到sql中--><select id="findUserByName" parameterType="ng.String"resultType="er">SELECT * FROM USER WHERE name LIKE '%${value}%'</select></mapper>3.5.2 将映射文件加载到SqlMapConfig配置文件中<!--加载映射文件--><mappers><mapper resource="sqlmap/User.xml"/></mappers>3.5.3 程序编写@Testpublicvoid findUserByIdTest()throws IOException{// mybatis配置文件String resource ="SqlMapConfig.xml";InputStream input =Resources.getResourceAsStream(resource);// 创建会话工厂SqlSessionFactory sqlSessionFactory =new SqlSessionFactoryBuilder().build(input);// 通过工厂得到SqlSessionSqlSession sqlSession = sqlSessionFactory.openSession();// 通过SqlSession操作数据库User user = sqlSession.selectOne("test.findUserById",23);System.out.println(user.getName());// 释放资源sqlSession.close();}// 根据name查询用户信息,得到一条记录的结果@Testpublicvoid findUserByNameTest()throws IOException{// mybatis配置文件String resource ="SqlMapConfig.xml";InputStream input =Resources.getResourceAsStream(resource);// 创建会话工厂SqlSessionFactory sqlSessionFactory =new SqlSessionFactoryBuilder().build(input);// 通过工厂得到SqlSessionSqlSession sqlSession = sqlSessionFactory.openSession();// 通过SqlSession操作数据库List<User> list = sqlSession.selectList("test.findUserByName","李");System.out.println(list.size());// 释放资源sqlSession.close();}3.6 插入用户信息3.6.1 User.xml映射文件:<!--添加用户parameterType:制定输入参数类型是pojo#{}:中指定pojo属性名,接收到pojo对象的属性值,mybatis通过OGNL获取对象的属性值--><insert id="insertUser" parameterType="er">insert into user(username,password) value(#{username},#{password}) </insert>3.6.2 测试代码:@Testpublicvoid insertUserTest()throws IOException{// mybatis配置文件String resource ="SqlMapConfig.xml";InputStream input =Resources.getResourceAsStream(resource);// 创建会话工厂SqlSessionFactory sqlSessionFactory =new SqlSessionFactoryBuilder().build(input);// 通过工厂得到SqlSessionSqlSession sqlSession = sqlSessionFactory.openSession();// 通过SqlSession操作数据库User user =new User();user.setUsername("ll");user.setPassword("123456");sqlSession.insert("test.insertUser",user);//提交事务mit();// 释放资源sqlSession.close();}3.7 自增主键返回mysql自增主键,执行insert提交之前自动生成一个自增主键。
SSM开发实战教程(Spring+Spring MVC+Mybatis) 第1章 MyBatis入门
1.2.3 MyBatis开发环境搭建
项目中使用MyBatis基本步骤有导入相关jar包,编写 配置文件和映射文件,创建接口,创建实体类,最 后就可以设计Dao层的实现类了。
本书使用的MyBatis版本为MyBatis-3.4.5,下载地址 是: https:///mybatis/mybatis-3/releases,下 载mybatis-3.4.5.zip
与Hibernate相比,MyBatis具有以下几个优点:
SQL 语句与代码分离。只需要在XML映射文件中配置SQL 语句,而无须在Java代码中编写SQL语句,给程序的维护 带来了很大便利。
手写SQL语句,灵活方便,查询效率高,能够完成较复杂 查询。
采用原生SQL语言,无须学习面向对象的HQL语言,相对 简单易学快上手。
此外由于Java项目还要连接MySQL数据库,故还需要 导入MySQL数据库驱动包mysql-connector-java5.1.37.jar
所需全部jar包
1.3第一个MyBatis项目
(1)MySQL中创建数据库studentdb,创建表student, 并添加若干测试用数据记录
(2)在Eclipse中新建web项目mybatis11,将下载下来 的Mybatis的有关jar包以及mysql数据库驱动jar包全 部导入(复制)到目录WebContent/WEB-INF/lib下
1.2.2 MyBatis与Hibernate的比较
Hibernate框架是“全自动”的ORM,使用完全的数据库 封装机制实现对象和数据库表之间的映射,自动生成与 执行SQL语句,数据库无关性比较好,方便移植。
MyBatis框架是“半自动”ORM,需要程序员自行编写 SQL语句,MyBatis再通过映射文件将返回的结果字段映 射到指定对象。MyBatis无法做到数据库无关性,每次只 能针对一个数据库做开发。
第7章 MyBatis的核心配置
学习目标掌握映射文件中常用元素的使用了解MyBatis的基础知识核心对象的作用熟悉配置文件中各个元素的作用7.1 MyBatis的核心对象7.1.1 SqlSessionFactory什么是SqlSessionFactory?SqlSessionFactory是MyBatis框架中十分重要的对象,它是单个数据库映射关系经过编译后的内存镜像,其主要作用是创建SqlSession。
SqlSessionFactory对象的实例可以通过SqlSessionFactoryBuilder对象来构建,而SqlSessionFactoryBuilder则可以通过XML配置文件或一个预先定义好的Configuration实例构建出SqlSessionFactory的实例。
构建SqlSessionFactory通过XML配置文件构建出的SqlSessionFactory实例现代码如下:SqlSessionFactory对象是线程安全的,它一旦被创建,在整个应用执行期间都会存在。
如果我们多次的创建同一个数据库的SqlSessionFactory,那么此数据库的资源将很容易被耗尽。
为此,通常每一个数据库都会只对应一个SqlSessionFactory,所以在构建SqlSessionFactory实例时,建议使用单列模式。
7.1.2 SqlSession1.什么是SqlSession?SqlSession是MyBatis框架中另一个重要的对象,它是应用程序与持久层之间执行交互操作的一个单线程对象,其主要作用是执行持久化操作。
每一个线程都应该有一个自己的SqlSession实例,并且该实例是不能被共享的。
同时,SqlSession实例也是线程不安全的,因此其使用范围最好在一次请求或一个方法中,绝不能将其放在一个类的静态字段、实例字段或任何类型的管理范围(如Servlet的HttpSession)中使用。
使用完SqlSession对象后要及时关闭,通常可以将其放在finally块中关闭。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
mybatis入门到精通以前曾经用过ibatis,这是mybatis的前身,当时在做项目时,感觉很不错,比hibernate灵活。
性能也比hibernate 好。
而且也比较轻量级,因为当时在项目中,没来的及做很很多笔记。
后来项目结束了,我也没写总结文档。
已经过去好久了。
但最近突然又对这个ORM 工具感兴趣。
因为接下来自己的项目中很有可能采用这个ORM工具。
所以在此重新温习了一下mybatis, 因此就有了这个系列的mybatis 教程.什么是mybatisMyBatis是支持普通SQL查询,存储过程和高级映射的优秀持久层框架。
MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。
MyBatis使用简单的XML或注解用于配置和原始映射,将接口和Java的POJOs (Plan Old Java Objects,普通的Java对象)映射成数据库中的记录.orm工具的基本思想无论是用过的hibernate,mybatis,你都可以法相他们有一个共同点:1. 从配置文件(通常是XML配置文件中)得到sessionfactory.2. 由sessionfactory 产生session3. 在session 中完成对数据的增删改查和事务提交等.4. 在用完之后关闭session 。
\5. 在java 对象和数据库之间有做mapping 的配置文件,也通常是xml 文件。
mybatis实战教程(mybatis in action)之一:开发环境搭建mybatis 的开发环境搭建,选择: eclipse j2ee 版本,mysql 5.1 ,jdk 1.7,mybatis3.2.0.jar包。
这些软件工具均可以到各自的官方网站上下载。
首先建立一个名字为MyBaits 的dynamic web project1. 现阶段,你可以直接建立java 工程,但一般都是开发web项目,这个系列教程最后也是web的,所以一开始就建立web工程。
2. 将mybatis-3.2.0-SNAPSHOT.jar,mysql-connector-java-5.1.22-bin.jar 拷贝到web工程的lib目录.3. 创建mysql 测试数据库和用户表,注意,这里采用的是utf-8 编码创建用户表,并插入一条测试数据程序代码Create TABLE `user` (`id` int(11) NOT NULL AUTO_INCREMENT,`userName` varchar(50) DEFAULT NULL,`userAge` int(11) DEFAULT NULL,`userAddress` varchar(200) DEFAULT NULL,PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;Insert INTO `user` VALUES ('1', 'summer', '100', 'shanghai,pudong');到此为止,前期准备工作就完成了。
下面开始真正配置mybatis项目了。
1. 在MyBatis 里面创建两个源码目录,分别为src_user,test_src, 用如下方式建立,鼠标右键点击JavaResource.2. 设置mybatis 配置文件:Configuration.xml, 在src_user目录下建立此文件,内容如下:程序代码< ?xml version="1.0" encoding="UTF-8" ?>< !DOCTYPE configuration PUBLIC "-////DTD Config 3.0//EN""/dtd/mybatis-3-config.dtd">< configuration><typeAliases><typeAlias alias="User" type="er"/> </typeAliases><environments default="development"><environment id="development"><transactionManager type="JDBC"/><dataSource type="POOLED"><property name="driver" value="com.mysql.jdbc.Driver"/><property name="url" value="jdbc:mysql://127.0.0.1:3306/mybatis" /><property name="username" value="root"/><property name="password" value="password"/></dataSource></environment></environments><mappers><mapper resource="com/yihaomen/mybatis/model/User.xml"/></mappers>< /configuration>3. 建立与数据库对应的java class,以及映射文件.在src_user下建立package:com.yihaomen.mybatis.model ,并在这个package 下建立User 类:程序代码package com.yihaomen.mybatis.model;public class User {private int id;private String userName;private String userAge;private String userAddress;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getUserName() {return userName;}public void setUserName(String userName) {erName = userName;}public String getUserAge() {return userAge;}public void setUserAge(String userAge) {erAge = userAge;}public String getUserAddress() {return userAddress;}public void setUserAddress(String userAddress) {erAddress = userAddress;}}同时建立这个User 的映射文件User.xml:程序代码< ?xml version="1.0" encoding="UTF-8" ?>< !DOCTYPE mapper PUBLIC "-////DTD Mapper 3.0//EN""/dtd/mybatis-3-mapper.dtd">< mapper namespace="erMapper"><select id="selectUserByID" parameterType="int" resultType="User">select * from `user` where id = #{id}</select>< /mapper>下面对这几个配置文件解释下:1.Configuration.xml 是mybatis 用来建立sessionFactory 用的,里面主要包含了数据库连接相关东西,还有java 类所对应的别名,比如<typeAlias alias="User" type="er"/> 这个别名非常重要,你在具体的类的映射中,比如User.xml 中resultType 就是对应这里的。
要保持一致,当然这里的resultType 还有另外单独的定义方式,后面再说。
2. Configuration.xml 里面的<mapper resource="com/yihaomen/mybatis/model/User.xml"/>是包含要映射的类的xml配置文件。
3. 在User.xml 文件里面主要是定义各种SQL 语句,以及这些语句的参数,以及要返回的类型等.开始测试在test_src 源码目录下建立com.yihaomen.test这个package,并建立测试类Test:程序代码package com.yihaomen.test;import java.io.Reader;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 er;public class Test {private static SqlSessionFactory sqlSessionFactory;private static Reader reader;static{try{reader = Resources.getResourceAsReader("Configuration.xml");sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);}catch(Exception e){e.printStackTrace();}}public static SqlSessionFactory getSession(){return sqlSessionFactory;}public static void main(String[] args) {SqlSession session = sqlSessionFactory.openSession();try {User user = (User) session.selectOne("erMapper.selectUserByID", 1);System.out.println(user.getUserAddress());System.out.println(user.getUserName());} finally {session.close();}}}现在运行这个程序,是不是得到查询结果了。