操作步骤
创建数据库
建立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 configurationPUBLIC "-//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 configurationPUBLIC "-//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;}@Overridepublic 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 mapperPUBLIC "-//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 {@Testpublic 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();}@Testpublic 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接口,即面向接口编程