使用mybatis连接mysql数据库_mybatis mysql-爱代码爱编程
一.Mybatis是什么?Mybatis的优点?
MyBatis是支持普通SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装。MyBatis可以使用简单的XML格式或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。
优点:
1、简单易学:本身就很小且简单。没有任何第三方依赖,最简单安装只要两个jar文件+配置几个sql映射文件易于学习,易于使用,通过文档和源代码,可以比较完全的掌握它的设计思路和实现。
2、灵活:mybatis不会对应用程序或者数据库的现有设计强加任何影响。 sql写在xml里,便于统一管理和优化。通过sql语句可以满足操作数据库的所有需求。
3、解除sql与程序代码的耦合:通过提供DAO层,将业务逻辑和数据访问逻辑分离,使系统的设计更清晰,更易维护,更易单元测试。sql和代码的分离,提高了可维护性。
4、提供映射标签,支持对象与数据库的orm字段关系映射
5、提供对象关系映射标签,支持对象关系组建维护
6、提供xml标签,支持编写动态sql。
二.Mybatis的功能框架
三.为什么要引入Mybatis(JDBC存在的问题)
1、数据库链接创建、释放频繁造成系统资源浪费从而影响系统性能,如果使用数据库链接池可解决此问题。
2、Sql语句在代码中硬编码,造成代码不易维护,实际应用sql变化的可能较大,sql变动需要改变java代码。
3、 使用preparedStatement向占有位符号传参数存在硬编码,因为sql语句的where条件不一定,可能多也可能少,修改sql还要修改代码,系统不易维护。
4、 对结果集解析存在硬编码(查询列名),sql变化导致解析代码变化,系统不易维护,如果能将数据库记录封装成pojo对象解析比较方便。
四.使用Mybatis的步骤
1、 加载数据库驱动
2、 创建并获取数据库链接
3、 创建jdbc statement对象
4、 设置sql语句
5、 设置sql语句中的参数(使用 preparedStatement)
6、 通过statement执行sql并获取结果
7、 对sql执行结果进行解析处理
8、 释放资源(resultSet、preparedstatement、connection)
五.配置Mybatis的运行环境
java项目架构(也可以是maven)
jar包导入:
mysql-connector-java-5.1.7-bin.jar可以参考文章使用JDBC连接数据库-CSDN博客
mybatis-3.1.1.jar的获取
前往项目概览 - mybatis-3 - GitCode下载
解压缩后为:图中所选即为实验所用jar包
java版本和mybatis版本对照表
数据库准备:
数据库名为u_student,表名为student
conf.xml文件编写
定义了驱动,url,用户名,密码,所连接的数据库
<?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">
<!--指定HTML文档遵循的文档类型定义DTD,段首部分内容不改变-->
<configuration>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/u_student"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
</configuration>
六.使用Mybatis
1.定义表所对应的实体类Student:
package Jdbc;
public class Student {
public String name;
public int age;
public Student(){}
public Student(String name,int age){
this.name=name;
this.age=age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
2.定义操作Student表的sql映射文件studentMapper.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="Jdbc.studentMapper">
<select id="getStudent" parameterType="String" resultType="Jdbc.Student">
select * from student where name=#{name}
</select>
</mapper>
3.在conf.xml文件中注册studentMapper.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">
<!--指定HTML文档遵循的文档类型定义DTD,段首部分内容不改变-->
<configuration>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/u_student"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="Jdbc/studentMapper.xml"/>
</mappers>
</configuration>
4.编写测试代码:执行定义的select语句
package Jdbc;
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 java.io.IOException;
import java.io.Reader;
import java.util.List;
public class Test {
public static void main(String[] args) throws IOException {
//加载mybatis的配置文件(它也加载关联的映射文件)
String resource="conf.xml";
Reader reader= Resources.getResourceAsReader(resource);
//构建sqlSession的工厂
SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(reader);
//创建能执行映射文件中sql的sqlSession
SqlSession session=sqlSessionFactory.openSession();
//映射sql的标识字符串
String statement="Jdbc.studentMapper.getStudent";
//执行查询一个user对象的sql,依次为传过去的标识字符串和参数
Student student=session.selectOne(statement,"zhangsan");
System.out.println(student);
}
}
5.针对CRUD的不同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="Jdbc.studentMapper">
<select id="getStudent" parameterType="String" resultType="Jdbc.Student">
select * from student where name=#{name}
</select>
<select id="getStudents" resultType="Jdbc.Student">
select * from student;
</select>
<insert id="insertStudent" parameterType="Jdbc.Student">
insert into student(name,age) values(#{name},#{age})
</insert>
<delete id="deleteStudent" parameterType="String">
delete from student where name=#{name}
</delete>
<update id="updateStudent" parameterType="Jdbc.Student">
update student set name=#{name},age=#{age} where name=#{name}
</update>
</mapper>