--------------------------------映射文件配置-------------------------------------java
<?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>mysql
-----------------------------------mybatis配置文件-------------------------------------sql
<?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>數據庫
---------------------------------數據源---------------------------------apache
mysql.driver=com.mysql.jdbc.Driver
mysql.url=jdbc:mysql://127.0.0.1:3306/mybatis
mysql.username=root
mysql.password=rootsession
oracle.driver=oracle.jdbc.driver.OracleDriver
oracle.url=jdbc:oracle:thin:@127.0.0.1 :1521:orcl
oracle.username=scott
oracle.password=rootmybatis
---------------------------------工具類----------------------------------------oracle
package cn.gdpe.util;app
import java.io.InputStream;dom
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>