1.Mybatis简介
Mybatis是一款优秀的持久层框架,它支持定制化SQL,存储过程以及高级映射。Mybatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。Mybatis可以使用简单的XM或注解来配置和映射原生类类型、接口和java的POJO(Plain Old Java Objects,普通老式java对象)为数据库中的记录。
Mybatis是一个半自动化的ORM框架,需要手工匹配提供POJO、SQL和映射关系。
2.为什么选择Mybatis?
- 它消除了大量的JDBC冗余代码
- 它有低的学习曲线
- 它能更好的与传统数据库协同工作
- 它可以接受SQL语句
- 它性能好
- 容易与第三方框架集成
3.第一个数据库查询的程序
step1:新建一个Students表,插入两条数据,便于后续查询
step2:在项目上新建一个jars文件夹,导入相关jar包
step3:新建一个mybatis配置文件 mybatis-config.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>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>
<property name="username" value="root"/>
<property name="password" value="mysql"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/mapper/StudentsMapper.xml"/>
</mappers>
</configuration>
resource:后来需定义的一个sql映射文件
这里的用户名在项目里需要更改,创建一个低级别只对数据库有增删改查操作的账号,不要使用root,会存在安全风险。
step4:新建一个com.pojo包,在这个包下创建一个Students类,对应数据库里的每一项
package com.pojo;
import java.util.Date;
public class Students {
private int stu_id;
private String name;
private String email;
private Date dob;
public Students() {
super();
}
public int getStu_id() {
return stu_id;
}
public void setStu_id(int stu_id) {
this.stu_id = stu_id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public Date getDob() {
return dob;
}
public void setDob(Date dob) {
this.dob = dob;
}
}
step5:新建一个com.mapper包,在这个包下定义一个接口StudentsMapper,定义方法getAllStudents()来获取学生信息
public interface StudentsMapper {
//查询所有学生信息
public List<Students> getAllStudents();
}
step6:定义操作students表的sql映射文件 StudentsMapper.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="com.mapper.StudentsMapper">
<select id="getAllStudents" resultType="com.pojo.Students">
select * from students
</select>
</mapper>
参数说明: namespace :对应的接口 id:方法名 resultType:返回类型
step7:编写测试类
package com.main;
import java.io.IOException;
import java.io.InputStream;
import java.util.Date;
import java.util.List;
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 com.mapper.StudentsMapper;
import com.pojo.Students;
/**
* 测试代码
* @author ASUS
*
*/
public class Main {
public static void main(String[] args) throws IOException {
//step1:得到SqlSessionFactory 相当于连接池
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
//step2:得到SqlSession 相当于connection
SqlSession sqlSession=sqlSessionFactory.openSession();
StudentsMapper sm=sqlSession.getMapper(StudentsMapper.class);
//step3:查询信息
List<Students> students=sm.getAllStudents();
for(Students student:students) {
System.out.println(student.getStu_id()+"\t"+student.getName()+"\t"+student.getEmail()+"\t"+student.getDob());
}
}
}
输出结果:
####解决列名不匹配查询出错的问题
当我们把上面例子的stu_id不小心 定义成了 ,你会发现取不到对应的id值了
解决方式:只需对 StudentsMapper.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="com.mapper.StudentsMapper">
<resultMap id="stumap" type="com.pojo.Students">
<id property="stuId" column="stu_id" />
<result property="name" column="name"/>
<result property="email" column="email"/>
<result property="dob" column="dob"/>
</resultMap>
<select id="getAllStudents" resultMap="stumap">
select * from students
</select>
</mapper>
注意这里的select语句里对应的是resultMap,如果写成了resultType会报异常
4.insert, update 和 delete
数据变更语句 insert,update 和 delete 的实现非常接近
step1:在接口创建对应的方法
public void addStudent(Students s);
public void updateStudent(Students s);
public void deleteStudent(Students s);
step2:在StudentsMapper.xml添加以下内容
<insert id="addStudent">
insert into students(name,email,dob) values(#{name},#{email},#{dob})
</insert>
<update id="updateStudent">
update students set
name = #{name},
email = #{email},
dob = #{dob}
where stu_id=#{stu_id}
</update>
<delete id="deleteStudent">
delete from students where stu_id=#{stu_id}
</delete>
参考资料:http://www.mybatis.org/mybatis-3/zh/getting-started.html#
Mybatis学习笔记(二) https://blog.csdn.net/qq_42922647/article/details/91126830