正文开始前先简单介绍一下两种方法,可自行跳转查看对应部分
一、JDBC
JDBC简介:
JDBC:java database connectivity,简称jdbc。是一种标准Java应用编程接口,用来连接Java和数据库。
传统JDBC执行步骤:
导入驱动jar包
Class.forName("com.mysql.jdbc.Driver"); //注册相关数据库驱动
Connection conn = DriverManager.getConnerction(url,username,pass); //创建数据库连接
/*
url:连接数据库的地址 例如:"jdbc:mysql://127.0.0.1:3306/test"
其中127.0.0.1是回送地址,指本地机,也可以用localhost;3306是端口号;test是数据库的名字。
username:登录数据库所用的用户名。
pass:登录数据库所用的密码。
*/
String sql = "sql语句";
//select * from one;
//insert one value(?,?);
//创建statement声明
statement sm = conn.createStatement();
//ps声明可以绑定sql中?的值
PreparedStatement ps= conn.prepareStatement(sql);
ps.setint(1,1); // 第一个?的值为1
ps.setString(2,"Hello"); //第二个?的值为字符Hello
//以增加、更新、删除为例,i为受影响的行数
int i = sm.executeUpdate(sql); //ps.executeUpdate(sql)
ResultSet rs = sm.execute(sql); //select语句用ResultSet来接收结果
while(rs.nesxt()){
System.out.print(rs.getInt("id")); //获取结果集中为id的列的值并打印
}
//释放资源
rs.close();
sm.close();
conn.close();
二、MyBatis
MyBatis简介:
MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Ordinary Java Object,普通的 Java对象)映射成数据库中的记录。 (百度百科)
简单来说封装了JDBC,使JDBC使用更简便。
MyBatis步骤:
导入jar包
配置文件MyBatisConfig.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核心根标签-->
<configuration>
<!--引入数据库配置properties-->
<properties resource="jdbc.properties"/>
<!--environments 配置数据库环境,环境可以有多个,用default属性指定使用的是哪个-->
<environments default="mysql2">
<!--environment配置数据库环境,id属性唯一标识-->
<environment id="mysql">
<!--transactionManager事务管理 type属性 采用jdbc默认的事务-->
<transactionManager type="JDBC"></transactionManager>
<!--dataSource 数据源信息 type属性 连接池-->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/test2"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
<environment id="mysql2">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<!--${driver},$引用配置文件里面的对应的字段-->
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
<!--mappers引入映射配置文件,里面存放SQL语句-->
<mappers>
<!--mapper 引入指定的映射配置文件 resource属性指定映射配置文件的路径-->
<mapper resource="StudentMapper.xml"/>
</mappers>
</configuration>
数据库配置文件jdbc.properties
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/test
username=root
password=123456
//里面的配置和JDBC一样
StudentMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!--DTD约束-->
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--
mapper:核心根标签
namespace属性:名称空间 和对应的接口文件名一致
-->
<mapper namespace="StudentMapper">
<!--select等等sql标签
id:唯一标识
resultType:指定结果映射对象类型 这里举例一个名为student的实体类
parameterType:指定参数映射对象类型
#{id} 里面的id可以动态获取传进来的参数里对应的id字段
-->
<select id="selectAll" resultType="student">
SELECT * FROM student
</select>
<select id="selectById" resultType="student" parameterType="int">
select * from student where id = #{id}
</select>
<insert id="insert" parameterType="student">
insert into student value (#{id},#{name},#{pass})
</insert>
<update id="updateById" parameterType="student">
update student set name = #{name} , pass = #{pass} where id = #{id}
</update>
<delete id="deleteById" parameterType="int">
delete from student where id = #{id}
</delete>
</mapper>
StudentMapper接口
public interface StudentMapper {
List<Student> selectAll();
Student seleceById(Integer id);
Integer insert(Student stu);
Integer update(Student stu);
Integer delete(Integer id);
}
StudentService接口(业务层)
public interface StudentService {
List<Student> selectAll();
Student seleceById(Integer id);
Integer insert(Student stu);
Integer update(Student stu);
Integer delete(Integer id);
}
StudentServiceImpl
public class StudentServiceImpl implements StudentService {
//创建持久层对象
private StudentMapper mapper = new StudentMapperImpl();
@Override
public List<Student> selectAll() {
return mapper.selectAll();
}
@Override
public Student seleceById(Integer id) {
return mapper.seleceById(id);
}
@Override
public Integer insert(Student stu) {
return mapper.insert(stu);
}
@Override
public Integer update(Student stu) {
return mapper.update(stu);
}
@Override
public Integer delete(Integer id) {
return mapper.delete(id);
}
}
JavaTest文件(演示一种方法)
@Test
public void selectAll() throws IOException {
//加载核心配置文件
InputStream is = Resources.getResourceAsStream("MyBatisConfig.xml");
//获取SqlSession工厂对象
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
//通过SqlSession工厂对象获取SQLSession对象
SqlSession sqlSession = sqlSessionFactory.openSession();
//执行sql语句
List<Student> stus = sqlSession.selectList("StudentMapper.selectAll");
for (Student student : stus) {
System.out.println(student);
}
sqlSession.close();
is.close();
}
三、对比
消除了JDBC大量冗余的代码,不需要手动开关连接;MyBatis的sql语句在xml文件里面编写,改变sql语句不再需要重新编译:
从上文中我们可以看到JDBC每次都需要打开关闭数据库,编写SQL语句。
而使用MyBatis我们的SQL语句只需要保存在一个xml文件中,还可以使用注解方式,直接写在Mapper文件里,后期改变的时候只需要改变一个地方,xml文件或者Mapper里的语句,而JDBC需要在每一个需要使用SQL的文件中。
在后面使用Spring框架后,我们可以更加轻松的使用MyBatis进行数据库的操作,省去is流读取MyBatis配置文件。