mybatis入门详解
Mybatis框架简介
MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。2013年11月迁移到Github。
iBATIS一词来源于“internet”和“abatis”的组合,是一个基于Java的持久层框架。iBATIS提供的持久层框架包括SQL Maps和Data Access Objects(DAOs)
MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Ordinary Java Object,普通的 Java对象)映射成数据库中的记录
1.mybatis运行过程
1、 sqlmapconfig.xml文件是mybatis全局配置文件,配置了mybatis运行相关的环境。
2、 mapper.xml 是sql映射文件,文件中主要配置了对数据库操作的sql语句,文件需要在sqlmapconfig.xml文件在进行载入。
3、 sqlSessionFactory 工厂会话,通过主配置文件中的信息构造出来。
4、 sqlSession 通过会话工厂创建,用来操作数据库。
5、 mybatis底层自定义了Executor执行器接口操作数据库,Executor接口有两个实现,一个是基本执行器、一个是缓存执行器。
6、 Mapped Statement也是mybatis一个底层封装对象,它包装了mybatis配置信息及sql映射信息等。mapper.xml文件中一个sql对应一个Mapped Statement对象,sql的id即是Mapped statement的id。
- 配置开发环境
2.1添加相关jar包。
mybaits框架依赖jar包:
mybatis-3.2.7.jar —mybatis的核心包
mybatis-3.2.7.pdf–mybatis使用手册
如果您使用Maven,只需将以下依赖项添加到您的pom.xml:
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
</dependency>
<!--以下是mysql数据库驱动和log4j jar包-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.46</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
除了添加Mybatis jar包还需要添加具体数据库驱动。
2.2 添加mybatis的主配置文件。
此文件作为mybatis的全局配置文件,配置了mybatis的运行环境等信息。
主配置文件的名称可以随意命名的,一般将其命名为mybatis-config.xml,这里也将配置文件命名为mybatis-config.xml,如果创建的是web项目将配置文件房子src目录下,如果是maven项目放在main/resources目录下。
web项目:
maven项目:
2.3 mybatis-config.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/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" value="jdbc:mysql://127.0.0.1:3306/mydatabase"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<mappers>
<!--注册映射文件-->
<mapper resource="com/Gorilla1024/dao/UserMapper.xml"/>
</mappers>
</configuration>
我这里数据库配置信息默认为mysql数据库,账号密码:root 123456 请按照实际情况修改。
2.4 映射文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.Gorilla1024.dao.UserMapper">
<!--编写sql语句-->
</mapper>
2.4 创建数据库
现在创建一个测试的数据库。
数据库已经提前创建好了,命名mydatabase 。
现在创建一张用户信息表,包括用户ID,密码,姓名,手机号,性别。
DROP TABLE IF EXISTS `userinfo`;
CREATE TABLE `userinfo` (
`UseId` varchar(20) NOT NULL,
`usePassword` varchar(20) NOT NULL,
`UseName` varchar(40) NOT NULL,
`Phone` varchar(15) NOT NULL,
`UseSex` varchar(4) NOT NULL,
PRIMARY KEY (`UseId`)
) ;
2.5 创建对应数据库的Java对象。
这里在 com.Gorilla1024.dao包下创建UserInfo;
package com.Gorilla1024.dao;
public class UserInfo {
private String UseId;
private String usePassword;
private String UseName;
private String Phone;
private String UseSex;
public UserInfo(){};
public UserInfo(String useId, String usePassword, String useName, String phone, String useSex) {
UseId = useId;
this.usePassword = usePassword;
UseName = useName;
Phone = phone;
UseSex = useSex;
}
public String getUsePassword() {
return usePassword;
}
public void setUsePassword(String usePassword) {
this.usePassword = usePassword;
}
public String getUseName() {
return UseName;
}
public void setUseName(String useName) {
UseName = useName;
}
public String getPhone() {
return Phone;
}
public void setPhone(String phone) {
Phone = phone;
}
public String getUseSex() {
return UseSex;
}
public void setUseSex(String useSex) {
UseSex = useSex;
}
public String getUseId() {
return UseId;
}
public void setUseId(String useId) {
UseId = useId;
}
}
3 mybatis实现简单的CRUD
3.1 插入信息。
先编写sqlmapper.xml sql映射。
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.Gorilla1024.dao.UserMapper">
<insert id="insertUser" parameterType="com.Gorilla1024.dao.UserInfo">
insert into UserInfo values (#{UseId},#{usePassword},#{UseName},#{Phone},#{UseSex})
</insert>
</mapper>
</mapper>
id 是唯一标识这个sql映射,在同一个命名空间中保持唯一。
parameterType 是作为输入参数类别配置,mybatis会自动将传入参数对象一一配对赋值给#{xxx} 保持xxx于参数对象内的变量名相同。(可以省略不写)。
测试代码
public void test2(){
SqlSession sqlsession=null;
UserInfo userinfo=new UserInfo("1","123456","Gorilla1024","18143375977","男");
try {
//加载核心文件
InputStream inputStream=Resources.getResourceAsStream("mybatis-config.xml");
//创建sqlSessionFactory
SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream);
//创建会话
sqlsession= sqlSessionFactory.openSession();
//执行sql语句 一个参数为sqlmapper文件中的ID,第二个为创建的user对象。
sqlsession.insert("insertUser",userinfo);
//提交事务,不提交数据库不会发生改变。
sqlsession.commit();
} catch (IOException e) {
e.printStackTrace();
}
}
结果
3.2 查询信息
添加sql映射。
<select id="selectUser" resultType=""com.Gorilla1024.dao.UserInfo" >
SELECT * FROM UserInfo;
</select>
resultType 设置查询结果集类型,结果集会对应到UserInfo对象。
测试代码
public void test2(){
SqlSession sqlsession=null;
List<UserInfo> list=new ArrayList<UserInfo>();
try {
//加载核心文件
InputStream inputStream=Resources.getResourceAsStream("mybatis-config.xml");
//创建sqlSessionFactory
SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream);
//创建会话
sqlsession= sqlSessionFactory.openSession();
//执行sql语句 一个参数为sqlmapper文件中的ID,第二个为创建的user对象,将结果赋值给UserInfo对象的集合。
list= sqlsession.selectList("selectUser");
System.out.println(list);
//提交事务,不提交数据库不会发生改变。
sqlsession.commit();
} catch (IOException e) {
e.printStackTrace();
}
}
结果
更新,删除类似,这里就省略掉了。
如有错误欢迎指出,谢谢阅读。