xml文件
configuration—配置信息 driver url username password
mapper——-SQL语句
两个好处
1.写完程序后还可更改(执行项目时候 修改几乎不会产生)
2.一个mapper文件 StudentMapper.xml 语句(CURD)在一起(语句在一起便于管理)
不好的地方
1.文件本身的结构比较复杂
2.文件中的SQL与DAO方法不在一起———开发者觉得写起来更方便的
注解方式
为了弥补XML文件的不好方式
1.写在方法上面(SQL+DAO方法 绑定在一起 开发者写起来更加方便)
2.注解通常就一行(比原来的xml形式简单 一对多 一对一 多对多关系也不是很简单)
需要注意
注解本身我们是调用不到的——底层需要通过反射技术来解析
如果想要使用注解方式执行——必须依托于Mapper代理
dao.StudentDao
package dao;
import domain.Student;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Update;
import java.util.Map;
public interface StudentDao {
//删除操作
@Delete("delete from student1 where sid = #{sid}")
public void delete(@Param("sid")Integer a);//用@Param注解取名,与SQL语句中的#{key}对应
@Insert("insert into student1 values(#{sid},#{sname},#{ssex},#{sage})")
public void insert(Student student);
@Update("update student1 set sname=#{sname},ssex=#{ssex},sage=#{sage} where sid = #{sid}")
public void update(Map param);//例如,param.put("sid",1);
}
domain.Student(省略,看表格)
service.StudentService
package service;
import dao.StudentDao;
import domain.Student;
import util.MyUtil;
import java.util.Map;
public class StudentService {
private StudentDao dao= MyUtil.getMapper(StudentDao.class,true);
//删除学生
public void deleteStudent(Integer sid){
dao.delete(sid);
}
//新增学生
public void insertStudent(Student student){
dao.insert(student);
}
//修改学生
public void updateStudent(Map param){
dao.update(param);
}
}
util.MyUtil
package util;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
public class MyUtil {
private static SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(Thread.currentThread().getContextClassLoader().getResourceAsStream("configuration.xml"));
//提供方法sqlSession对象
public static SqlSession getSqlSession(){
return factory.openSession();
}
public static SqlSession getSqlSession(boolean flag){
return factory.openSession(flag);
}
//提供方法mapper对象
public static <T>T getMapper(Class clazz){
return (T)getSqlSession().getMapper(clazz);
}
public static <T>T getMapper(Class clazz,boolean flag){
return (T)getSqlSession(flag).getMapper(clazz);
}
}
configuration.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>
<!--default属性 可以选择某一个environment环境-->
<environments default="development1">
<environment id="development1">
<!--利用JDBC来管理提交 回滚等功能-->
<transactionManager type="JDBC"></transactionManager>
<!--type 设置当前数据源管理连接的方式 三种方式UNPOOLED、POOLED、JNDI详见下方文档-->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/testmybatis?useSSL=false&characterEncoding=UTF-8"/>
<property name="username" value="root"/>
<property name="password" value="cy414ljh212,,,"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper class="dao.StudentDao"></mapper>
</mappers>
</configuration>