【MyBatis-04】mybatis开发dao的方式

本文详细介绍了一种基于MyBatis的传统DAO开发模式,包括项目搭建、POJO定义、Mapper配置及测试验证等步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基本的DAO的开发方式,就是指的传统的开发dao接口和dao实现类的方式,

下来我代领大家一步步的实现一次。

1.创建项目



2.为符合maven格式,添加config和test代码包以及lib文件夹


完成后的目录结构为:





3.导入如下jar文件:

asm-3.3.1.jar
cglib-2.2.2.jar
commons-logging-1.1.1.jar
javassist-3.17.1-GA.jar
junit-4.9.jar
log4j-1.2.17.jar
log4j-api-2.0-rc1.jar
log4j-core-2.0-rc1.jar
mybatis-3.2.7.jar
mysql-connector-java-5.1.7-bin.jar
slf4j-api-1.7.5.jar
slf4j-log4j12-1.7.5.jar



4.添加pojo类

package com.cm.mybatis.pojo;

public class ClassInfo {

	private int classid;
	private String classname;
	private String classlocation;
	private String memo;

	public int getClassid() {
		return classid;
	}

	public void setClassid(int classid) {
		this.classid = classid;
	}

	public String getClassname() {
		return classname;
	}

	public void setClassname(String classname) {
		this.classname = classname;
	}

	public String getClasslocation() {
		return classlocation;
	}

	public void setClasslocation(String classlocation) {
		this.classlocation = classlocation;
	}

	public String getMemo() {
		return memo;
	}

	public void setMemo(String memo) {
		this.memo = memo;
	}

	@Override
	public String toString() {
		return "ClassInfo [classid=" + classid + ", classname=" + classname + ", classlocation=" + classlocation
				+ ", memo=" + memo + "]";
	}
}


4.在config中添加SqlMapConfig.xml文件

<?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>
	<environments default="defaultEnvironment">
		<environment id="defaultEnvironment">
			<transactionManager type="JDBC"></transactionManager>
			<dataSource type="POOLED">
				<property name="driver" value="com.mysql.jdbc.Driver" />
				<property name="url"
					value="jdbc:mysql://localhost:3306/course_mybatis?useUnicode=true&characterEncoding=utf8" />
				<property name="username" value="root" />
				<property name="password" value="root" />
			</dataSource>
		</environment>
	</environments>
</configuration>

5.添加接口

package com.cm.mybatis.dao;

import java.util.List;

import com.cm.mybatis.pojo.ClassInfo;

public interface ClassInfoDao {
	
	ClassInfo findClassInfoById(int classid);
	
	List<ClassInfo> findClassInfosByName(String classname);
	
	void insertClassInfo(ClassInfo info);

}

6.添加实现类

package com.cm.mybatis.dao.impl;

import java.util.List;

import com.cm.mybatis.dao.ClassInfoDao;
import com.cm.mybatis.pojo.ClassInfo;

public class ClassInfoDaoImpl implements ClassInfoDao {

	@Override
	public ClassInfo findClassInfoById(int classid) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public List<ClassInfo> findClassInfosByName(String classname) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public void insertClassInfo(ClassInfo info) {
		// TODO Auto-generated method stub

	}
}

7.添加mapper文件

<?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">

<mapper namespace="com.cm.mybatis.ClassInfo">
	<select id="findClassInfoById" parameterType="int"
		resultType="com.cm.mybatis.pojo.ClassInfo">
		SELECT * from class_info where classid=#{id}
	</select>

	<select id="findClassInfosByName" parameterType="java.lang.String"
		resultType="com.cm.mybatis.pojo.ClassInfo">
		SELECT * from class_info where classname LIKE '%${value}%'
	</select>

	<insert id="insertClassInfo" parameterType="com.cm.mybatis.pojo.ClassInfo">
		<selectKey keyProperty="classid" order="AFTER" resultType="int">
			SELECT LAST_INSERT_ID()
		</selectKey>

		INSERT INTO class_info(classname,classlocation,memo)
		VALUES(#{classname},#{classlocation},#{memo})
	</insert>
</mapper>




8.将mapper文件添加到全局配置文件中



9.完成实现类

package com.cm.mybatis.dao.impl;

import java.util.List;

import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;

import com.cm.mybatis.dao.ClassInfoDao;
import com.cm.mybatis.pojo.ClassInfo;

public class ClassInfoDaoImpl implements ClassInfoDao {

	private SqlSessionFactory sqlSessionFactory;

	public ClassInfoDaoImpl(SqlSessionFactory sqlSessionFactory) {
		this.sqlSessionFactory = sqlSessionFactory;
	}

	@Override
	public ClassInfo findClassInfoById(int classid) {
		
		SqlSession sqlSession = sqlSessionFactory.openSession();
		ClassInfo info = sqlSession.selectOne("com.cm.mybatis.ClassInfo.findClassInfoById", classid);
		sqlSession.close();
		return info;
	}

	@Override
	public List<ClassInfo> findClassInfosByName(String classname) {

		SqlSession sqlSession = sqlSessionFactory.openSession();
		List<ClassInfo> infos = sqlSession.selectOne("com.cm.mybatis.ClassInfo.findClassInfosByName", classname);
		sqlSession.close();
		return infos;
		
	}

	@Override
	public void insertClassInfo(ClassInfo info) {

		SqlSession sqlSession = sqlSessionFactory.openSession();
		sqlSession.selectOne("com.cm.mybatis.ClassInfo.insertClassInfo", info);
                sqlSession.commit();
		sqlSession.close();

	}

}
10.编写测试类

package com.cm.mybaits.test;

import java.io.IOException;
import java.io.InputStream;
import java.util.Date;
import java.util.List;
import java.util.Random;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Before;
import org.junit.Test;

import com.cm.mybatis.dao.impl.ClassInfoDaoImpl;
import com.cm.mybatis.pojo.ClassInfo;

public class ClassInfoTest {
	
	private SqlSessionFactory sqlSessionFactory;

	@Before
	public void beforeLoad() throws IOException {

		// 全局配置文件的文件名
		String resource = "SqlMapConfig.xml";

		// 将全局配置文件加载到Stream中
		InputStream is = Resources.getResourceAsStream(resource);

		// 根据全局配置文件创建SqlSessionFactory
		sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
		
	}
	
	
	@Test
	public void findClassInfoById(){
		
		ClassInfoDaoImpl impl=new ClassInfoDaoImpl(sqlSessionFactory);
		ClassInfo info=impl.findClassInfoById(1);
		System.out.println(info);
	}
	
	@Test
	public void findClassInfosByName(){
		ClassInfoDaoImpl impl=new ClassInfoDaoImpl(sqlSessionFactory);
		List<ClassInfo> infos=impl.findClassInfosByName("2002");
	}
	
	@Test
	public void insertClassInfo(){
		ClassInfoDaoImpl impl=new ClassInfoDaoImpl(sqlSessionFactory);
		ClassInfo info=createClassInfo();
		impl.insertClassInfo(info);
		
		System.out.println(info.getClassid());
	}
	
	private ClassInfo createClassInfo(){
		ClassInfo info=new ClassInfo();
		info.setClasslocation("咱家的事情"+new Random().nextInt());
		info.setClassname("新班级名称"+new Date());
		info.setMemo(new Random().toString());
		return info;
	}

}

11.代码写完了,哥们不知道能不能运行起来,测试一把,有问题我们逐个修复吧!

不赖哦,第一个直接测试通过



第二个测试失败,看下原因




太多结果异常,使用单个执行结果进行了集合查询将集合结果

使用了错误的sqlsession方法

定位到代码,对于一个集合的结果,使用了selectone,复制代码时候要注意修改啊,教训啊



修改后的结果



执行结果




这里忘记写打印执行结果的代码了,顺手补上。


执行结果



测试第三个方法



数据库结果




可能有细心的朋友发现打印出来的classid是0,这是因为什么呢。

1.还是selectone 偷笑

2.结果没有返回


修改三个地方

1)、接口方法中提供对应的返回值


2)、实现类中做对应的修改



3)、测试方法也要做对应修改





再次执行,已经获取到了新增数据的ID




总算完成了,有以下疑问

1.这种方式的代码量大不大?


大,的确大,这就是传统的开发方式,完全没有体现出来mybatis的优势啊,同时还有大量的模板代码。

下一节我们就想办法简化他


最后我们贴下对应的代码结构:








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值