简介
- MyBatis是一款优秀的持久化框架,支持定制化sql,存储过程以及高级映射。
- MyBatis避免了几乎所有的jdbc代码和手动设置参数以及获取结果集。
- MyBatis可以用XML或注解来配置和映射原生信息,讲接口和Java POJO映射成数据库中的记录。
使用MyBatis所需的jar包
单元测jar相关maven依赖
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${project.junit}</version>
</dependency>
MyBatis相关依赖
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>${project.mybatis}</version>
</dependency>
mysql相关依赖
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${project.jdbc.connection}</version>
</dependency>
</dependencies>
对应的model类
package com.xalo.model;
public class Student {
private Integer id;
private String name;
private Integer age;
public Student(Integer id, String name, Integer age) {
super();
this.id = id;
this.name = name;
this.age = age;
}
public Student() {
super();
// TODO Auto-generated constructor stub
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
@Override
public String toString() {
return "Student [id=" + id + ", name=" + name + ", age=" + age + "]";
}
}
要使用mybatis需要在xml文件中有以下有关链接数据库方面的配置:
myByatis-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>
<!--为java类型起一个别名,在配置文件中可直接使用别名, 作用:书写方便 大小写不敏感 -->
<typeAliases>
<typeAlias type="com.xalo.model.Student" alias="Student" />
</typeAliases>
<!-- 数据库环境配置 一个环境对应一个数据库 将来和spring整合之后 就不再配置 -->
<environments default="development">
<environment id="development">
<!-- 事务类型配置 JDBC:使用JDBC的事务管理 -->
<transactionManager type="JDBC" />
<!-- 数据源配置 POOLED:使用mybatis默认的数据源 -->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url"
value="jdbc:mysql://127.0.0.1:3306/mybatis?useUnicode=true&characterEncoding=UTF-8&useSSL=false" />
<property name="username" value="root" />
<property name="password" value="q6rwqrtdy" />
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/xalo/model/studentMapping.xml" />
<mapper resource="com/xalo/dao/studentDao.xml" />
</mappers>
</configuration>
我们说mybatis是面向接口的编程所以我们申明一下接口,实现一下接单的crud
package com.xalo.dao;
import java.util.List;
import com.xalo.model.Student;
public interface StudentDao {
public void addStudent(Student student);
public List<Student> queryAllStudent();
public Student queryStudentById(Integer id);
public Integer updateNameById(String name,Integer id);
}
<?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">
<!-- mybatis面向接口编程:可以将该配置文件看做是接口的实现类 最终会根据该配置文件生成对应接口的实现类
1.namespace:需要写成接口的完整类名:包名.接口名
2.sql语句的id必须是对应的方法名
3.parameyerType必须和方法的参数的类型保持一致
4.resultType必须和方法的返回值保持一致 -->
<mapper namespace="com.xalo.dao.StudentDao">
<insert id="addStudent" parameterType="Student">
insert into student (id,name,age) values(#{id},#{name},#{age});
</insert>
<select id="queryAllStudent" resultType="Student">
select * from student;
</select>
<select id="queryStudentById" parameterType="Integer"
resultType="Student">
select * from student where id =#{id};
</select>
<!-- 小结(问题):mybatis在3.4.4之后不能直接使用#{index} 替换为#{argindex} index指参数的为值从0开始 -->
<!--所有的更新(增删改)操作,不用指定返回值类型,
默认返回受影响的行数
-->
<update id="updateNameById" parameterType="java.util.Map">
update student set name=#{arg0} where id=#{arg1};
</update>
</mapper>
接下来我们就可以在单元测试运行测试代码来完成操作,这里有一个加载顺序如下:
import org.junit.Test;
import com.mysql.jdbc.interceptors.SessionAssociationInterceptor;
import com.xalo.model.Student;
public class MybatisTest {
//插入的测试方法
// @Test
// public void insertTest(){
// /*
// * 1.读取mybatis的配置文件
// * 2.通过sessionFactoryBuilder加载sessionFactory
// * 3.sessionFactory加载session对象
// * 4.通过session对象使用映射文件中的sql语句进行crud操作
// */
//
// try {
//
// //读取配置文件
// InputStream in = Resources.getResourceAsStream("mybatis-config.xml");
//
// //加载配置文件并创建sessionFactory工厂
// SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
// SqlSessionFactory sf= builder.build(in);
//
// //创建session对象
// SqlSession session = sf.openSession();
//
// //创建要插入数据库的对象
// Student student = new Student(1,"晓刚",22);
//
// /*
// * 参数一:映射文件中的SQL语句(namespace.id)
// * 参数二:要插入的数据
// */
//
//
// //删除
//
// session.delete("com.xalo.model.student.deleteStudent",student);
//// session.insert("com.xalo.model.Student.addStudent",student);
//
// session.commit();
// session.close();
// } catch (IOException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
// }
//更新操做根据name该name
// @Test
// public void updateStudent(){
//
// try {
// InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
//
// SqlSessionFactory sFactoryBuilder = new SqlSessionFactoryBuilder().build(inputStream);
//
// SqlSession session = sFactoryBuilder.openSession();
// //根据name该name
// Map< String, String> map = new HashMap<String, String>();
// map.put("newName", "小花");
// map.put("oldName", "晓刚");
// session.update("com.xalo.model.Student.updateStuName",map);
//
// session.commit();
// session.close();
//
// } catch (IOException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
//
// }
//查询单条记录的方法
@Test
public void queryStudent(){
try {
InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactory sfFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession session = sfFactory.openSession();
//查询单条
// Student student = session.selectOne("com.xalo.model.Student.queryStudentById",3);
//查询多条
//List<Student> student = session.selectList("com.xalo.model.Student.queryAllStudent");
//查询所有名字
// List<String> studentName = session.selectList("com.xalo.model.Student.queryStudentByName");
//查询想要的字段
List<Map<String, Object>> list = session.selectList("com.xalo.model.Student.queryStuNameAndAge");
session.commit();
session.close();
System.out.println(list);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
以上是我整理的关于myBatis的简单数据操作,希望能帮助大家,同事也希望大家给出宝贵意见。
773

被折叠的 条评论
为什么被折叠?



