一:什么是mybatis?
MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架。MyBatis 避免了几乎所有的 JDBC 代码和手工设置参数以及抽取结果集。MyBatis 使用简单的 XML 或注解来配置和映射基本体,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。 --------------------- 作者:于亮 来源:CSDN 原文:https://blog.csdn.net/jiuqiyuliang/article/details/45286191?utm_source=copy 版权声明:本文为博主原创文章,转载请附上博文链接!
MyBatis参考资料官网:https://mybatis.github.io/mybatis-3/zh/index.html
优化一:
数据库配置信息采用properties文件方式存储,便于后期更改
二:mybatis的简单运用:
- 创建一个简单的java项目,添加mybatis需要用到的饿jar包(两个jar包):
Mybatis包:mybatis-3.2.7.jar
mysql驱动包:mysql-connector-java-5.0.4-bin.jar
如下图所示:
Jar下载地址:https://download.csdn.net/download/qq_34377273/10712447
- 在mysql数据库中创建用到的测试数据库,创建一个user表:
- 添加mybatis的配置文件
在项目的src目录下创建一个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://localhost:3306/test" />
<property name="username" value="root" />
<property name="password" value="root" />
</dataSource>
</environment>
</environments>
<!-- 注册映射文件 -->
<mappers>
<mapper resource="com/mybatis/mapper/userMapper.xml"/>
</mappers>
</configuration>
- 在entity目录下创建user类,类名跟数据库字段保持一致
User类代码如下:
package com.mybatis.entity;
public class User {
private int id;
private String name;
private int age;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public User() {
super();
}
public User(int id, String name, int age) {
super();
this.id = id;
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "User [id=" + id + ", name=" + name + ", age=" + age + "]";
}
}
定义操作users表的sql映射文件userMapper.xml
- 在com.mybatis.mapper包下定义操作user表的sql映射文件userMapper.xml文件:
userMapper.xml内容如下:
<?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.mybatis.mapper.userMapper">
<select id="queryOne" parameterType="int" resultType="com.mybatis.entity.User">
select * from user where id=#{uid}
</select>
<select id="queryAll" resultType="com.mybatis.entity.User">
select * from user
</select>
<insert id="addUser" parameterType="com.mybatis.entity.User">
insert into user(name,age) values(#{userName},#{age})
</insert>
<update id="update" parameterType="com.mybatis.entity.User">
update user set name=#{userName} where id=#{uid}
</update>
<delete id="del" parameterType="int">
delete from user where id=#{id}
</delete>
</mapper>
- 在mybatis-config.xml文件中注册userMapper.xml文件:
<!-- 注册映射文件 -->
<mappers>
<!-- userMapper.xml位于com.mybatis.mapper这个包下,所以resource写成 com.mybatis.mapper.userMapper.xml-->
<mapper resource="com/mybatis/mapper/userMapper.xml"/>
</mappers>
- 在com.mybatis.dao包中创建UserDao类,实现数据的增删查改功能:
代码如下:
创建UserDao类,添加增删查改方法:
/**
* 根据id查询数据
*/
public void queryById(){
// 加载核心配置文件
InputStream is = UserDao.class.getResourceAsStream("/mybatis-config.xml");
// 创建SqlSessionFactory对象
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(is);
// 创建SqlSession对象
SqlSession session = sessionFactory.openSession();
User user = session.selectOne("queryById", 1);
System.out.println(user);
}
结果运行截图:
/**
* 查询全部数据
*/
public void queryAll(){
// 加载核心配置文件
InputStream is = UserDao.class.getResourceAsStream("/mybatis-config.xml");
// 创建SqlSessionFactory对象
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(is);
// 创建SqlSession对象
SqlSession session = sessionFactory.openSession();
List<User> userList = session.selectList("queryAll");
System.out.println(userList);
}
结果运行截图:
/**
* 添加数据信息
*/
public void addUser(){
// 加载核心配置文件
InputStream is = UserDao.class.getResourceAsStream("/mybatis-config.xml");
// 创建SqlSessionFactory对象
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(is);
// 创建SqlSession对象
SqlSession session = sessionFactory.openSession();
User user = new User();
user.setName("赵六");
user.setAge(58);
int rel = session.insert("addUser",user);
System.out.println(rel);
session.commit();
}
运行结果截图:
/**
* 更改数据信息
*/
public void update(){
// 加载核心配置文件
InputStream is = UserDao.class.getResourceAsStream("/mybatis-config.xml");
// 创建SqlSessionFactory对象
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(is);
// 创建SqlSession对象
SqlSession session = sessionFactory.openSession();
User user = new User();
user.setName("赵赵");
user.setAge(11);
user.setId(17);
int rel = session.update("update", user);
System.out.println(rel);
session.commit();
}
运行结果截图:
/**
* 删除数据信息
*/
public void delete() {
// 加载核心配置文件
InputStream is = UserDao.class.getResourceAsStream("/mybatis-config.xml");
// 创建SqlSessionFactory对象
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(is);
// 创建SqlSession对象
SqlSession session = sessionFactory.openSession();
int rel = session.delete("del",17);
System.out.println(rel);
session.commit();
}
运行结果截图:
优化:
1,Mybatis的配置文件标签是有顺序要求的,如果顺序不正确话可能会造成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><!-- 配置 -->
<properties /> <!-- 属性 -->
<settings /> <!-- 设置 -->
<typeAliases /> <!-- 类型命名 -->
<typeHandlers /> <!-- 类型处理器 -->
<objectFactory /> <!-- 对象工厂 -->
<plugins /> <!-- 插件 -->
<environments> <!-- 配置环境 -->
<environment> <!-- 环境变量 -->
<transactionManager /> <!-- 事务管理器 -->
<dataSource /> <!-- 数据源 -->
</environment>
</environments>
<databaseIdProvider /> <!-- 数据库厂商标识 -->
<mappers /> <!-- 映射器 -->
</configuration>
2,使用properies文件方式存储数据库的连接信息,后期便于更改:
文件内容如下:
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/test
username=root
pwd=123456
使用properties文件后,我们的mybaties-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>
<!-- 设置配置文件 -->
<properties resource="db.properties"></properties>
<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="${pwd}" />
</dataSource>
</environment>
</environments>
<!-- 注册映射文件 -->
<mappers>
<!-- userMapper.xml位于com.mybatis.mapper这个包下,所以resource写成com.mybatis.mapper.userMapper.xml-->
<mapper resource="com/mybatis/mapper/userMapper.xml"/>
</mappers>
</configuration>
3,为实体类定义别名,这样我们在引用时候就省去了书写类全路径的繁琐,直接写我们定义的别名即可:(注意定义别名在xml文件中的顺序问题,参考优化1)
定义别名有两种方式:
一种是一个个定义别名,我们需要多次定义
<typeAliases>
<typeAlias type="com.mybatis.entity.User" alias="User"/>
</typeAliases>
还有一种可以批量定义别名,批量定义后,定义的别名默认为就是该类的类名:
<typeAliases>
<!-- 批量设置别名 -->
<package name="com.mybatis.entity"/>
</typeAliases>