操作步骤
创建数据库
建立user表
放入数据
1、创建javaweb工程并添加Jar包
用到的jar包
junit 用于测试
mybatis框架:mybatis-3.5.9.jar
mysql数据库:mysql-connector-java-8.0.28.jar
2、添加MyBatis核心配置文件
<?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>
<!-- 配置内容在这里 -->
</configuration>
driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatis
username=root
password=root
编写”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>
<properties resource="database.properties"></properties>
<typeAliases>
<package name="entity"/>
</typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC&useSSL=false"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="mapper/UserMapper.xml"></mapper>
</mappers>
</configuration>
”mybatis-config.xml”的配置节点说明
1、configuration:
配置文件的根元素节点
2、environments:
表示配置MyBaits的多套运行环境,该元素节点下可以配置多个environment子元素节点
3、environment:
配置Mybaits的一套运行环境,需指定运行环境ID、事务管理(transactionManager)和数据源(dataSource)配置等相关信息
4、mappers:
其下可以配置多个mapper节点来具体指定SQL映射文件的路径,resource属性的值表述了类资源路径下的SQL映射文件的路径
3、创建实体类
package entity;
public class User {
private String username;
private String password;
private Integer age;
private String sex;
private String birthDate;
public User() {
}
public User(String username, String password, Integer age, String sex, String birthDate) {
this.username = username;
this.password = password;
this.age = age;
this.sex = sex;
this.birthDate = birthDate;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getBirthDate() {
return birthDate;
}
public void setBirthDate(String birthDate) {
this.birthDate = birthDate;
}
@Override
public String toString() {
return "User{" +
"username='" + username + '\'' +
", password='" + password + '\'' +
", age=" + age +
", sex='" + sex + '\'' +
", birthDate=" + birthDate +
'}';
}
}
注: 1、类的名称不一定和表名相同
2、属性名称和数据库字段名称相同,才能自动映射
3、属性类型需要和数据库字段类型对应
4、每一个属性都要生成get/set方法
4、创建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="/">
<!-- SQL映射写在这里 -->
</mapper>
编辑”UserMapper.xml”SQL映射内容
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="/">
<select id="findAll" resultType="user">
select * from user
</select>
<select id="findAll2" resultType="map">
select * from user
</select>
<select id="myCount" resultType="int" parameterType="map">
select count(*) from smbms_bill join smbms_provider on smbms_bill.providerId=smbms_provider.id where smbms_provider.proName like concat('%',#{proName},'%') and isPayment=#{isPayment}
</select>
</mapper>
<!--建立映射关系-->
配置节点说明
select:表示查询语句
id属性:表示该SQL语句的唯一标识符
resultType属性:表示SQL语句返回值类型,此处通过SQL语句查询数据,将数据直接映射到User实体类上
5、代码测试,输出结果
import entity.User;
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 java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class UserMapperTest {
@Test
public void Test01() throws IOException {
System.out.println(" = ");
InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
SqlSessionFactory build = sqlSessionFactoryBuilder.build(inputStream);
SqlSession sqlSession = build.openSession();
List<User> findAll = sqlSession.selectList("findAll");
for (User user: findAll) {
System.out.println("user = " + user);
}
sqlSession.close();
}
@Test
public void Test02() throws IOException {
InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
SqlSessionFactory build = sqlSessionFactoryBuilder.build(inputStream);
SqlSession sqlSession = build.openSession();
List<Map<String,Object>> findAll = sqlSession.selectList("findAll2");
for (Map<String, Object> stringObjectMap : findAll) {
System.out.println("stringObjectMap = " + stringObjectMap);
}
sqlSession.close();
}
}
结果为list集合对象
结果为map集合对象
6、扩展
configuration 根节点
properties 可以配置在Java 属性配置文件中
settings 修改 MyBatis 在运行时的行为方式
typeAliases 为 Java 类型命名一个别名(简称)
typeHandlers 类型处理器
objectFactory 对象工厂
plugins 插件
environments 环境
environment 环境变量
transactionManager 事务管理器
dataSource 数据源
mappers 映射器
注意顺序不然会爆红
typeAliases元素的作用是配置类型别名
二选一推荐第二个
这个可以指定名称
作用是简化代码
默认是类首字母小写的名称
通过package的name属性直接指定包名,Mybatis会自动扫描指定包下的JavaBean,并设置一个别名,默认名称为非限定类名
原本要这样写
现在
属性文件: 文件后缀为.properties 这种文件以key=value格式存储内容
指定类资源路径下的属性文件
使用${}占位符和属性文件中的键名来实现动态配置
mapper
namespace属性的作用: namespace和子元素的id联合保证全局唯一,区别不同的映射文件 绑定DAO接口,即面向接口编程