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 configurationPUBLIC "-//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>
