1).新建一个java web工程/可以使java 工程;
新建mybatis工程的java package包
2).把mybatis框架的jar包及其依赖包拷贝到项目工程中
如:log4j,数据库等依赖的包
3).编写数据实体类,与数据库表进行对应 - 为orm做准备
import java.util.Date;
public class Cource {
//编号
private String courceId;
//名称
private String courceName;
//学分
private Integer courceScore;
//开课时间
private Date startDate;
public Cource() {
super();
}
public Cource(String courceId, String courceName, Integer courceScore,
Date startDate) {
super();
this.courceId = courceId;
this.courceName = courceName;
this.courceScore = courceScore;
this.startDate = startDate;
}
public String getCourceId() {
return courceId;
}
public void setCourceId(String courceId) {
this.courceId = courceId;
}
public String getCourceName() {
return courceName;
}
public void setCourceName(String courceName) {
this.courceName = courceName;
}
public Integer getCourceScore() {
return courceScore;
}
public void setCourceScore(Integer courceScore) {
this.courceScore = courceScore;
}
public Date getStartDate() {
return startDate;
}
public void setStartDate(Date startDate) {
this.startDate = startDate;
}
}
4).定义数据操作接口,并在接口中定义数据操作
import java.util.List;
import com.neuedu.mybatisdemo.bean.Cource;
//接口用于定义数据库的操作
public interface ICourceDao {
//查询所有的课程
public List<Cource > findAll();
//根據課程編號查詢課程信息
public Cource findById(String id);
//新增课程
public void addCource(Cource cource);
//
public void editCource(Cource cource);
public void deleteById(String id);
}
5).编写一个接口映射文件,对接口的数据操作进行映射
<?xml version="1.0" encoding="UTF-8"?>
<!-- mybatis接口映射文件,用于映射接口操作,
mybatis会根据配置文件的配置实现数据库的操作 -->
<!-- 注意:mybatis有两个配置文件,一个是全局配置文件,一个接口映射文件
接口映射文件需要使用接口文档映射定义
-->
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- 在mapper映射文件中,使用mapper标签进行实现接口映射,使用namespace指定要映射的接口
即namespace配置的是接口的名称,一般的一个映射文件实现(映射)一个接口,
在运行过程中,mybatis的代理会根据配置文件实现数据操作接口定义的数据库操作(相当于由mybatis编写了一个接口实现类)
-->
<mapper namespace="com.neuedu.mybatisdemo.dao.ICourceDao">
<!-- resultMap用于配置查询结果的映射关系 -->
<resultMap type="com.neuedu.mybatisdemo.bean.Cource" id="courceMap">
<!-- id用于配置数据库的主键或唯一列 -->
<!-- orm框架可以完成数据库表的列与java类的属性的映射关系 - objct mapping对象映射,relation mapping关系映射 -->
<id column="cource_id" property="courceId" />
<result column="cource_name" property="courceName" />
<result column="cource_score" property="courceScore" />
<result column="start_date" property="startDate" />
</resultMap>
<!-- 在接口映射文件中,使用select,inser,update,delete配置对应的sql脚本 -->
<!-- 在以上标签中,使用id配置接口的方法名称,resultMap用于配置自定义的结果映射关系 -->
<select id="findAll" resultMap="courceMap" >
select * from cource
</select>
<!-- 注意:使用mybatis進行配置,id不能重名,即接口方法不能重載 -->
<!-- 如果接口方法有參數,需要使用parameterType配置參數的類型(原始數據類型或對象類型),
有多個參數使用parameterMap進行配置或使用對象兩類型進行配置(集合類型) -->
<select id="findById" resultMap="courceMap" parameterType="String">
<!-- 可以使用#{} 獲取參數值 -->
select * from cource where cource_id=#{id}
</select>
<insert id="addCource" parameterType="com.neuedu.mybatisdemo.bean.Cource">
INSERT INTO cource(cource_id,cource_name,cource_score,start_date)
VALUES (#{courceId},#{courceName},#{courceScore},sysdate)
</insert>
<delete id="deleteById" parameterType="String">
delete cource where cource_id=#{id}
</delete>
<update id="editCource" parameterType="com.neuedu.mybatisdemo.bean.Cource">
update cource set cource_name=#{courceName},cource_score=#{courceScore},start_date=sysdate
where cource_id=#{courceId}
</update>
</mapper>
6).编写mybatis全局配置文件,配置数据库连接参数,配置映射文件或数据操作接口。。。
<?xml version="1.0" encoding="UTF-8"?>
<!-- 这是mybatis全局配置文件,用于用于进行mybatis配置 -->
<!-- dtd:文档了卫星定义:使用全局文档类型约束 可以配置哪些标签,每个标签可以配置哪些文件 -->
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!-- 配置mybatis的运行环境 -->
<environments default="development">
<environment id="development">
<!-- 配置事务管理器 -->
<transactionManager type="JDBC"/>
<!-- 配置jdbc的4个参数 -->
<dataSource type="POOLED">
<property name="driver" value="oracle.jdbc.driver.OracleDriver"/>
<property name="url" value="jdbc:oracle:thin://localhost:1521/orcl"/>
<property name="username" value="crm"/>
<property name="password" value="123"/>
</dataSource>
</environment>
</environments>
<mappers>
<!-- 关联mybatis的接口映射文件 -->
<mapper resource="com/neuedu/mybatisdemo/dao/ICourceDao.xml"/>
</mappers>
</configuration>
7).编写测试类,测试mybatis框架:4个步骤,获取mybatis环境-->实例化数据操作接口-->调用接口方法-->处理操作接口
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.apache.log4j.Logger;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import com.neuedu.mybatisdemo.bean.Cource;
import com.neuedu.mybatisdemo.dao.ICourceDao;
import com.sun.org.apache.xml.internal.security.Init;
public class TestICourceDao {
private Logger logger = Logger.getLogger(TestICourceDao.class);
private SqlSession session = null;
@Before
public void init() {
// 1.加载mybatis环境
try {
String resource = "config/mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
// 2.通过mybatis实例化数据访问接口
session = sqlSessionFactory.openSession();
} catch (IOException e) {
logger.warn("发生了异常", e);
}
}
@After
public void destroy(){
if(session != null){
session.close();
}
}
@Test
public void testFindAll() {
ICourceDao courceDao = session.getMapper(ICourceDao.class);
// 3.调用数据访问接口,进行数据操作
List<Cource> list = courceDao.findAll();
// 4.处理数据操作的结果
for (Cource cource : list) {
logger.info("\n" + cource.getCourceId() + " "
+ cource.getCourceName() + " " + cource.getCourceScore()
+ " " + cource.getStartDate());
}
}
@Test
public void testFindById() {
ICourceDao courceDao = session.getMapper(ICourceDao.class);
// 3.调用数据访问接口,进行数据操作
Cource cource = null;
// 方法1: - 通過mybatis session先獲取mybatis映射接口,在調用接口的方法進行查詢
// cource = courceDao.findById("cource001");
// 方法2: - 直接使用mybatis session調用直接接口和方法,并進行參數傳遞
cource = session.selectOne(
"com.neuedu.mybatisdemo.dao.ICourceDao.findById",
"cource001");
// 4.处理数据操作的结果
if (cource != null) {
logger.info("\n" + cource.getCourceId() + " "
+ cource.getCourceName() + " "
+ cource.getCourceScore() + " " + cource.getStartDate());
} else {
logger.info("沒有找到數據");
}
}
@Test
public void testAddCource(){
Cource cource = new Cource("cource002", "mybatis实战", 4, null);
try{
session.getMapper(ICourceDao.class).addCource(cource);
logger.info("数据插入成功");
//事务提交
session.commit();
}catch(Exception e){
logger.warn("数据插入失败",e);
//session.rollback();
}
}
@Test
public void testEditCource(){
Cource cource = new Cource("cource002", "mybatis实战", 3, null);
try{
session.getMapper(ICourceDao.class).editCource(cource);
logger.info("数据修改成功");
//事务提交
session.commit();
}catch(Exception e){
logger.warn("数据修改失败",e);
//session.rollback();
}
}
@Test
public void testDeleteCource(){
//Cource cource = new Cource("course002", "mybatis实战", 4, null);
try{
session.getMapper(ICourceDao.class).deleteById("cource002");
logger.info("数据删除成功");
//事务提交
session.commit();
}catch(Exception e){
logger.warn("数据删除失败",e);
//session.rollback();
}
}
}