原始jdbc弊端及解决方案
Mybatis是什么?
一个便于程序员操作数据库的框架
Mybatis步骤
首先,除了最开始学习时写的java工程,后面写的许多项目都需要导入jar包,对于maven工程来说,就是添加坐标。所以,对于mybatis来说,第一步肯定是要导坐标。
1、必须的坐标
我们知道,mybatis是用来操作数据库的,所以必须导入数据库的坐标,此处使用的是mysql数据库,所以导入的是mysql坐标。
既然使用mybatis,而mybatis是一个框架,框架就是一个别人写好的各种java类啥的,我们要使用,自然也得导入这个框架。
所以两个基本的坐标就是数据库坐标和mybatis坐标
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.48</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.5</version>
</dependency>
2、创建数据表,编写实体类
创建数据库中的数据表,编写描述此数据表的Java类
3、编写配置文件
根据我对框架的理解,框架是:我们在写一些功能时发现,有一些功能的代码只有一小部分不同,但是大部分的内容是相同的,然后一些大佬们就将相同的部分封装起来,并且通过配置文件,或者方法参数之类的方式,让使用者可以提供那些变化的地方。
我们之前jdbc的代码逻辑,我们可以发现,无论是查询还是更新操作,代码有很多相同的部分,不同的部分也就是SQL语句,以及传递给方法的参数,如果是查询的话,需要将查询出来的内容封装成实体类,然后将结果返回。
因此变化的点由三部分:sql语句,方法参数,方法的返回值。
所以,框架就要求我们在配置文件中提供这些变化点。
另外我们在写jdbc时,需要提供用户名,密码,url,driverClass,这些内容也是变化的,所以也需要写在一个配置文件中。并且通过web的学习,我们知道,连接池可以提高速度,节省资源,因此需要在配置文件中配置连接池的信息。所以,我们只需要记住配置的标签即可。
为了分工明确,我们的配置文件有两个:
- 一个是用来书写sql语句的 userMapper.xml
- 一个是核心配置文件:用来配置其他内容,比如说:事务,数据源对象(连接池),sql语句所在的配置文件的位置 userMapperConfig.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是mapper的名字-->
<!--select:当sql语句是select自居时使用select作为mapper的子标签-->
<!--需要在select标签内写sql语句,现在是最简单的select子句,如果是含有占位符的sql子句,需要使用mybatis使用的占位符。具体的见增删改查的博客-->
<!--id是select标签的名字,可以任意取,resultType的属性是查询结果的类型:java类的全类名。如果是基本数据类型,则使用包装类-->
<mapper namespace="userMapper">
<select id="findAll" resultType="com.itheima.domain.User">
select * from user
</select>
</mapper>
<?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"></transactionManager>
<!--配置数据源:property的name属性的值是固定的,value的值根据实际情况填写-->
<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>
<!--需要引入所写的sql的配置文件-->
<mappers>
<mapper resource="userMapper.xml"></mapper>
</mappers>
</configuration>
编写测试文件
- Resources:ibatis包中
public void test1() throws IOException {
//每一个测试文件相同的地方
InputStream resourceAsStream = Resources.getResourceAsStream("userMapperConfig.xml");
SqlSessionFactory fa = new SqlSessionFactoryBuilder().build(resourceAsStream);
SqlSession sqlSession = fa.openSession();
//根据需求不同,调用的方法也不同
List<User> list = sqlSession.selectList("userMapper.findAll");
System.out.println(list);
sqlSession.close();
}