条件:使用maven管理项目(为了配置依赖项)
使用mybatis全流程:
1.建立数据库表,例如:建一张student 表
2.建立表对应的实体类
3.添加依赖项
4.创建dao层StudentDao接口,并添加crud
5.创建dao层StudentDao对应的mapper.xml文件,编写sql语句
6.在resources中编写mybatis配置文件:mybatis.xml
7.编写mybatis的工具类
8.在test文件中编写测试类
====================================================================
1. 建表student:
CREATE TABLE `student` (
`id` int(11) NOT NULL ,
`name` varchar(255) DEFAULT NULL,
`email` varchar(255) DEFAULT NULL,
`age` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
2. 编写实体类Student (略)
3. 添加依赖项 pom.xml
<dependencies>
<dependency>
<!-- 单元测试依赖 -->
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<!--mybatis依赖-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.1</version>
</dependency>
<!--mysql驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.9</version>
</dependency>
</dependencies>
4.创建dao层StudentDao接口,并添加crud
public Interface StudentDao{
//基本crud
List<Student> selectAll();
int insertStudent(Student student);
int updateStudent(Student student);
int deleteStudent(Integer id);
int updateStudentByName(@Parm(value="uname")String name,Integer id);//此处value=可以省略
}
5.创建dao层StudentDao对应的mapper.xml文件,编写sql语句
<?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-3-mapper.dtd表示包含了本文件的限定条件
-->
<mapper namespace="StudentDao对应的全限定名或者说相对路径">
<!--id与StudentDao接口中的方法名要一致
resultType 表示返回值类型,例如select:mybatis自动将select返回的每一条数据放入Student中并将其放进list集合中
# 表示占位符,{...}中间是传入的Student属性(也是数据库Student表的字段名)
-->
<select id="selectAll" resultType="Student的全限定名">
select id ,name,email,age from student
</select>
<insert id="insertStudent" resultType="Student的全限定名">
insert into student values(#{id},#{name},#{email},#{age})
</insert>
<update id="updateStudent">
update student set name=#{name},email=#{email},age=#{age} where id=#{id}
</update>
<!-- parameterType 表示传入的参数类型,这是{这里可以是任意变量}-->
<delete id="deleteStudent" parameterType="Integer">
delete from student where id=#{studentId}
</delete>
<!--uname是来自StudentDao中的方法参数@Parm(value)-->
<update id="updateStudentByName">
update student set name=#{uname} where id=#{id}
</update>
</mapper>
6.在resources中编写mybatis配置文件:mybatis.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">
<!--mybatis-3-config.dtd包含本文件的限定条件-->
<configuration>
<!--配置Mybatis日志-->
<settings>
<setting name="logImpl" value="STDOUT_LOGGING" />
<settings>
<!--environments 配置环境,一个环境表示一个数据库信息
default 默认使用的环境:数据库-->
<environments default="mysql">
<!--id 是自定义环境名称,表示一个数据库的连接信息-->
<environment id="mysql">
<!--type 指定事务类型,JDBC 表示使用JDBC的Connection对象-->
<transactionManager type ="JDBC" ></transactionManager>
<!--type 指定数据库连接信息,POOLED表示数据库连接池
这里相当于注册驱动,建立Connection连接,
DriverManager.getConnection(url,username,password)
四个property顺序可互换
-->
<dataSource type="POOLED">
<property name="url" value="jdbc:mysql://localhost:3306/ssm" />
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="username" value="root" />
<property name="password" value="123456" />
</dataSource>
</environment>
</environments>
<!--指定mapper文件的位置-->
<mappers>
<!--dao层有几个mapper.xml文件,这里就要配置多少个mapper标签-->
<mapper resource="mapper.xml的全限定名或者说mapper.xml的相对路径" />
</mappers>
</configuration>
7.编写mybatis的工具类
public class MybatisUtil{
private static SqlSessionFactory factory;
static{
try{
InputStream in = Resources.getResourceAsStream("mybatis.xml");
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
factory = builder.build(in);
}catch(IOException e){
e.printStackTrace();
}finally{
in.close();
}
}
//获取SqlSession对象的方法
public static SqlSession getSqlSession(){
Sqlsession session = null;
if(factory!=null){
//这里小括号可以添加true/false;true表示自动提交事务,false和无参表示手动提交事务
session = factory.openSession();
}
return session;
}
}
8.在test文件中编写测试类
public class MyTest{
@Test
public void testSelectAll(){
SqlSession session = Mybatis.getSqlSession();
StudentDao dao = session.getMapper(StudentDao.class);
List<Student> students = dao.selectAll();
students.forEach(student -> System.out.println(student));
}
@Test
public void testInsertStudent(){
SqlSession session = Mybatis.getSqlSession();
StudentDao dao = session.getMapper(StudentDao.class);
Student student = new Student(1001,"李四","lisi@163.com",33);
int i = dao.updateStudent(student);
session.commit();
session.close();
System.out.println("insertStudent:"+i);
}
@Test
public void testUpdateStudent(){
SqlSession session = Mybatis.getSqlSession();
StudentDao dao = session.getMapper(StudentDao.class);
Student student = new Student(1001,"lisi","lisi@126.com",67);
int i = dao.updateStudent(student);
session.commit();
session.close();
System.out.println("updateStudent:"+i);
}
@Test
public void testUpdateStudentByName(){
SqlSession session = Mybatis.getSqlSession();
StudentDao dao = session.getMapper(StudentDao.class);
int i = dao.updateStudentByName("小明",1001);
session.commit();
session.close();
System.out.println("updateStudentByName"+i);
}
@Test
public void testDeleteStudent(){
SqlSession session = Mybatis.getSqlSession();
StudentDao dao = session.getMapper(StudentDao.class);
int i = dao.deleteStudent(1001);
session.commit();
session.close();
System.out.println("deleteStudent"+i);
}
}