前言:
作为一个框架小白,入门的时候遇到了很多的问题,在网上找过很多的办法才解决掉,这篇文章主要就是分享一下我遇到的问题以及总结一下我的使用方法,如果有不好或者讲错的地方欢迎指出!
让我们回归正题,Mybatis是目前Web项目中比较好用的持久层框架,也是后期SSM整合当中的一员,它能为我们省去以前连接数据库,处理逻辑等比较麻烦的代码。本文不会涉及到源码级别,仅仅只是简单的使用以及遇到的问题。主要描述的配置方式为xml。
回顾:
相信大家都还忘不掉当初使用原生jdbc写Dao的痛苦。通过反射获取JDBC驱动、创建Connection、获取Connection、使用PreparedStatement预处理sql语句等等一系列的操作。
上面的代码是不是看到也头痛了呢?而Mybatis框架为我们解决了不少的烦恼。
Mybatis的准备工作
1.建议大家先去学习一下有关于Maven的知识,Maven是自动化构建工具(Maven的功能简而言之有两点1.方便我们导入jar包不需要再去网上找jar包资源 2.把我们自己的项目打包成jar包、war包等让项目之间可以更好地引用)
2.学习xml的语法规则(值得一提的是,xml文件中无法使用&符号,需要用&代替)
Mybatis的使用教程以及总结
Mybatis的配置方式有xml文件以及注解两种形式。在遇到比较复杂的sql语句以及比较大型的项目中一般使用xml形式。(建议大家重点放在xml配置上,注解虽简单但是实际上不那么常用~)
使用mybatis前需要在pom.xml文件中依赖:
<dependency> <!--mybatis的主要jar包 -->
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.6</version>
</dependency>
<dependency> <!--mysql数据库的驱动 -->
<groupId>mysql</groupId> <!--mysql8.0以上版本配置数据源的时候记得要有时区,否则无法运行 -->
<artifactId>mysql-connector-java</artifactId>
<version>8.0.21</version>
</dependency>
<dependency>
<groupId>junit</groupId> <!--方便测试我们的程序是否能运行 -->
<artifactId>junit</artifactId>
<version>RELEASE</version>
</dependency>
mybatis的配置文件(都需要导入头部约束)分为两类:
1.主配置文件
<?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">
主配置文件的作用是配置数据源,并且指出接口映射文件的位置。
示例如下:
<?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文件,里面包含了Jdbc连接所需要的url -->
<properties resource="JdbcConfig.properties"></properties>
<!-- 为实体类配置别名,在别的地方引用的时候直接使用类名即可,不要填写全限定类名 -->
<typeAliases>
<package name="gdut.imis.Entity"/>
</typeAliases>
<!-- 配置环境 用${}去引用外部资源文件 -->
<environments default="mysql">
<environment id="mysql">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
</environments>
<!-- 用mapper标签的resource指出接口映射文件的包名-->
<mappers>
<mapper resource="gdut/imis/dao/IUserDao.xml"/>
</mappers>
</configuration>
2.接口映射文件
<?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">
接口映射文件的最主要作用就是写入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属性必须要有,声明这个配置文件是为了哪个DAO接口而使用-->
<
<mapper namespace="gdut.imis.dao.IUserDao">
<select id="findAll" resultType="User">
select * from ttt_manager ;
</select>
</mapper>
<!-- 用注解不可以有这个文件 -->
<!-- 有参数要定义parameterType 有返回类型要定义resultType-->
注意事项:
在创建实体类时,数据库的名称应该与实体类属性一一对应,这样子Mybatis才能自动把查询的结果封装到实体类中,不然就会报错!!
小问题:
小编在实际运用的时候发现了一个小问题,如果方法需要多个参数,我们就不可以使用parameterType属性去指定参数名称,需要在方法参数加上注解为参数赋予名字,然后在xml文件中 用#{min}的方式去取出参数
List<Product> findByPrice(@Param("max") float max, @Param("min") float min);
<mapper namespace="gdut.imis.dao.IProductDAO">
<select id="findByPrice" resultType="Product" >
select * from product where price between #{min} and #{max} ;
</select>
</mapper>
以上就是使用Mybatis需要导入的依赖,配置的文件以及一些注意事项。
实际使用Myabtis
在Junit中使用Mybatis有如下几个步骤:
1.读取配置文件
2.创建SqlSessionFactory工厂
3.创建SqlSession使用openSession方法 (如果参数设为true则开启自动提交 一般不设置)
4.创建DAO接口的代理对象
5.执行dao中的方法
6.释放资源
public class MybatisTest {
InputStream in;
SqlSession session;
IUserDao dao;
@Before
public void init() throws Exception{
in = Resources.class.getResourceAsStream("/SqlMapConfig.tld");
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
session = factory.openSession();
dao = session.getMapper(IUserDao.class);
}
@After
public void destory() throws Exception{
session.close(); //记得关闭session以及io流
in.close();
//session.commit(); //如果执行非查询语句必须有commit才能提交到数据库
}
@Test
public void findAll() throws Exception{
List<User> list = dao.findAll();
for(User um : list){
System.out.print(um.getId() + " ");
System.out.print(um.getName() + " ");
System.out.println(um.getPassword()+ " ");
}
}
}
以上就是关于Mybatis框架个人遇到的问题以及见解,如果有什么错误的地方欢迎私信或评论指出~
小编学习的时候自己创建一个小project来测试,源码在gitee中(XiuGitHung/Mybatis学习模板) 希望我的文章能解决各位遇到的问题!