mybatis我的小案例(不喜勿噴)

--------------------------------映射文件配置-------------------------------------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>

相關文章
相關標籤/搜索