MYBatis编程式配置方法
一 环境准备
IDEA 2020.2.3
JKD14
Maven工程
Mysql数据库
mysql> CREATE TABLE `user` (
`id` int(11) NOT NULL auto_increment,
`username` varchar(32) NOT NULL COMMENT '用户名称',
`birthday` datetime default NULL COMMENT '生日',
`sex` char(1) default NULL COMMENT '性别',
`address` varchar(256) default NULL COMMENT '地址',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
insert into
user(
id,
username,
birthday,
sex,
address) values (23,'波波','2020-02-27 17:47:08','男','北京'),(42,'小波','2018-03-02 15:09:37','女','北京海淀'),(43,'大波','2018-03-04 11:34:34','女','北京中关村');
二 MyBatis 框架概述
mybatis是一个优秀的基于 java 的持久层框架,它内部封装了 jdbc,使开发者只需要关注 sql 语句本身,
而不需要花费精力去处理加载驱动、创建连接、创建 statement 等繁杂的过程。
mybatis通过 xml 或注解的方式将要执行的各种statement配置起来,并通过java对象和statement 中
sql 的动态参数进行映射生成最终执行的 sql 语句,最后由 mybatis 框架执行 sql 并将结果映射为 java 对象并
返回。
采用 ORM 思想解决了实体和数据库映射的问题,对 jdbc进行了封装,屏蔽了 jdbc api 底层访问细节,使我
们不用与 jdbc api 打交道,就可以完成对数据库的持久化操作。
三 环境搭建(基于映射)
第一步:创建maven工程并导入坐标
第二步:创建实体类和dao的接口
第三步:创建Mybatis的主配置文件 SqlMapConifg.xml(主要用来配置数据库 和映射配置文件找到我们的dao接口)
第四步:创建映射配置文件 IUserDao.xml (主要用来实现关于User这个实现类的SQL语句)
注意事项
mybatis的映射配置文件位置必须和dao接口的包结构相同
映射配置文件的mapper标签namespace属性的取值必须是dao接口的全限定类名
映射配置文件的操作配置(select),id属性的取值必须是dao接口的方法名
创建的实体类User中的成员变量名应与数据库中的表头一致。
测试
public static void main(String[] args) throws Exception {
/**
* 入门案例
* @param args
*/
//1.读取配置文件
InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml");
//2.创建SqlSessionFactory工厂
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
SqlSessionFactory factory = builder.build(in);
//3.使用工厂生产SqlSession对象
SqlSession session = factory.openSession();
//4.使用SqlSession创建Dao接口的代理对象
IUserDao userDao = session.getMapper(IUserDao.class);
//5.使用代理对象执行方法
List<User> users = userDao.findAll();
for(User user : users){
System.out.println(user);
}
//6.释放资源
session.close();
in.close();
}
四 环境搭建(基于注解)
删除IUsreDao.xml 并且在dao层接口的方法上面加注解
/*
* @author bobo
* @date 2020/11/7 8:59
* @Email:1498244906@qq.com
*/
public interface IUserDao {
@Select("select * from user")
List<User> findAll();
}
为什么可以这么写:
<mapper namespace="bobo.mybatis.dao.IUserDao">
<!--查询user表中的所有信息 -->
<select id="findAll" resultType="bobo.mybatis.pojo.User">
select * from user
</select>
</mapper>
namespce 、id 这两个属性是为了找到是哪个dao层中哪个接口的哪个方法。我们的注解就写在方法上面,所以就不用在写了。
resultType:确定返回值类型 List findAll() 中已经声明 了返回值是一个Uers类的集合所以不用再声明了;
所以只需要注解写入SQL语句就可以了。
五 补充
连接池:
我们在实际开发中都会使用连接池。
因为它可以减少我们获取连接所消耗的时间。
mybatis连接池3种方式的配置:
配置的位置:
主配置文件SqlMapConfig.xml中的dataSource标签,type属性就是表示采用何种连接池方式。
1
type属性的取值:
POOLED 采用传统的javax.sql.DataSource规范中的连接池,mybatis中有针对规范的实现
UNPOOLED 采用传统的获取连接的方式,虽然也实现Javax.sql.DataSource接口,但是并没有使用池的思想。
JNDI 采用服务器提供的JNDI技术实现,来获取DataSource对象,不同的服务器所能拿到DataSource是不一样。
注意:如果不是web或者maven的war工程,是不能使用的。
Mybatis中的延迟加载
什么是延迟加载
在真正使用数据时才发起查询,不用的时候不查询。按需加载(懒加载)
什么是立即加载
不管用不用,只要一调用方法,马上发起查询。
在对应的四种表关系中:一对多,多对一,一对一,多对多
一对多,多对多:通常情况下我们都是采用延迟加载。
多对一,一对一:通常情况下我们都是采用立即加载。