--------------------------------映射文件配置-------------------------------------
<?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">
<!-- 建议namespace为实体类的全路径 后面就可以 实体类.class.getName() -->
<mapper namespace="cn.gdpe.domain.Students">
<!--resultMap标签:映射实体与表
type:实体类的全名(包名+类名)
id:为实体与表的映射娶一个唯一的编号
-->
<resultMap type="student" id="student">
<!-- id标签映射的是主键 property表示的是实体类的属性 column表示的是表的字段
result映射的其他属性
-->
<id property="id" column="id"/>
<result property="name" column="name"/>
<result property="sal" column="sal"/>
</resultMap>
<!-- id唯一性
parameterType要执行的dao中的方法的参数,如果是类的话,必须用全路径(包名+类名)
-->
<insert id="add" parameterType="student">
insert into students(id,name,sal) values(#{id},#{name},#{sal})
</insert>
<select id="select" parameterType="int" resultType="student">
select id,name,sal from students where id=#{id}
</select>
<select id="selectAll" resultType="student">
select id,name,sal from students
</select>
<update id="update" parameterType="cn.gdpe.domain.Students">
update students set name=#{name},sal =#{sal} where id=#{id}
</update>
<delete id="delete" parameterType="student">
delete from students where id=#{id}
</delete>
</mapper>
-----------------------------------mybatis配置文件-------------------------------------
<?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>
<!-- 资源文件 -->
<properties resource="db.properties"/>
<!--此实体类的映射文件中的所有cn.gdpe.dao.StudentDao都可以换成student -->
<typeAliases>
<typeAlias type="cn.gdpe.domain.Students" alias="student"/>
</typeAliases>
<environments default="mysql_development">
<environment id="mysql_development">
<!--mybatis的事务管理方式 -->
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${mysql.driver}"/>
<property name="url" value="${mysql.url}"/>
<property name="username" value="${mysql.username}"/>
<property name="password" value="${mysql.password}"/>
</dataSource>
</environment>
<environment id="oracle_development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${oracle.driver}"/>
<property name="url" value="${oracle.url}"/>
<property name="username" value="${oracle.username}"/>
<property name="password" value="${oracle.password}"/>
</dataSource>
</environment>
</environments>
<!-- 映射文件 -->
<mappers>
<mapper resource="cn/gdpe/dao/StudentsMapper.xml"/>
</mappers>
</configuration>
---------------------------------数据源---------------------------------
mysql.driver=com.mysql.jdbc.Driver
mysql.url=jdbc:mysql://127.0.0.1:3306/mybatis
mysql.username=root
mysql.password=root
oracle.driver=oracle.jdbc.driver.OracleDriver
oracle.url=jdbc:oracle:thin:@127.0.0.1 :1521:orcl
oracle.username=scott
oracle.password=root
---------------------------------工具类----------------------------------------
package cn.gdpe.util;
import java.io.InputStream;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
public class MybatisUtil {
private static ThreadLocal<SqlSession> threadLocal=new ThreadLocal<SqlSession>();
private static SqlSessionFactory sqlSessoinFactory;
private MybatisUtil(){}
static{
InputStream is=MybatisUtil.class.getResourceAsStream("/mybatis.xml");
sqlSessoinFactory=new SqlSessionFactoryBuilder().build(is);
}
public static SqlSession getSqlSession(){
//从当前线程取出sqlsession
SqlSession sqlSession=threadLocal.get();
//如果为空
if(sqlSession==null){
//就从sqlSessoinFactory中打开一个sqlSession
sqlSession=sqlSessoinFactory.openSession();
//将session与当前线程绑在一起
threadLocal.set(sqlSession);
}
return sqlSession;
}
public static void closeSqlSession(){
//从当前线程取出sqlsession
SqlSession sqlSession=threadLocal.get();
//如果不为空
if(sqlSession!=null){
//将session与当前线程分开
sqlSession.close();
threadLocal.remove();
}
}
public static void main(String[] args){
getSqlSession().getConnection();
System.out.println("连接成功");
closeSqlSession();
}
}
------------------------------------dao测试类--------------------------------------------
package cn.gdpe.dao;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import cn.gdpe.domain.Students;
import cn.gdpe.util.MybatisUtil;
public class StudentDao {
@Test
public void add(){
SqlSession sqlSession=null;
try{
Students s=new Students();
s.setId(5);
s.setName("ly4");
s.setSal(10000.0);
sqlSession= MybatisUtil.getSqlSession();
sqlSession.insert(Students.class.getName()+".add",s);
//mybatis必须手动提交事务,否则不会向数据库插入数据
sqlSession.commit();
}catch(Exception e){
e.printStackTrace();
sqlSession.rollback();
}finally{
MybatisUtil.closeSqlSession();
}
}
// @Test
public Students select(){
SqlSession sqlSession=null;
try{
sqlSession= MybatisUtil.getSqlSession();
Students student =sqlSession.selectOne(Students.class.getName()+".select", 5);
//mybatis必须手动提交事务,否则不会向数据库插入数据
sqlSession.commit();
return student;
}catch(Exception e){
e.printStackTrace();
sqlSession.rollback();
return null;
}finally{
MybatisUtil.closeSqlSession();
}
}
// @Test
public void selectAll(){
SqlSession sqlSession=null;
try{
sqlSession= MybatisUtil.getSqlSession();
List<Students> students =sqlSession.selectList(Students.class.getName()+".selectAll");
//mybatis必须手动提交事务,否则不会向数据库插入数据
for(Students student : students){
System.out.println(student);
}
}catch(Exception e){
e.printStackTrace();
sqlSession.rollback();
}finally{
}
}
@Test
public void update(Students student){
SqlSession sqlSession=null;
try{
sqlSession= MybatisUtil.getSqlSession();
//mybatis必须手动提交事务,否则不会向数据库插入数据
sqlSession.update(Students.class.getName()+".update",student);
sqlSession.commit();
}catch(Exception e){
e.printStackTrace();
sqlSession.rollback();
}finally{
MybatisUtil.closeSqlSession();
}
}
@Test
public void delete(){
SqlSession sqlSession=null;
try{
sqlSession= MybatisUtil.getSqlSession();
Students student =sqlSession.selectOne(Students.class.getName()+".select", 3);
sqlSession.delete(Students.class.getName()+".delete", student);
sqlSession.commit();
}catch(Exception e){
e.printStackTrace();
sqlSession.rollback();
}finally{
MybatisUtil.closeSqlSession();
}
}
public static void main(String[] args){
StudentDao dao=new StudentDao();
Students student=dao.select();
student.setName("你吗");
// student.setSal(20000D);
dao.update(student);
}
}
---------------------------细节问题----------------------------------
1:当实体类属性与数据库表字段名称不一致时:
<resultMap type="student" id="studentMap">
<!-- id标签映射的是主键 property表示的是实体类的属性 column表示的是表的字段
result映射的其他属性
-->
<id property="id" column="s_id"/>
<result property="name" column="s_name"/>
<result property="sal" column="s_sal"/>
</resultMap>
<select id="select" parameterType="int" resultMap="studentMap">
select s_id,s_name,s_sal from students where s_id=#{id}
</select>