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

基本的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的优势啊,同时还有大量的模板代码。

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


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








  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
目标检测(Object Detection)是计算机视觉领域的一个核心问题,其主要任务是找出图像中所有感兴趣的目标(物体),并确定它们的类别和位置。以下是对目标检测的详细阐述: 一、基本概念 目标检测的任务是解决“在哪里?是什么?”的问题,即定位出图像中目标的位置并识别出目标的类别。由于各类物体具有不同的外观、形状和姿态,加上成像时光照、遮挡等因素的干扰,目标检测一直是计算机视觉领域最具挑战性的任务之一。 二、核心问题 目标检测涉及以下几个核心问题: 分类问题:判断图像中的目标属于哪个类别。 定位问题:确定目标在图像中的具体位置。 大小问题:目标可能具有不同的大小。 形状问题:目标可能具有不同的形状。 三、算法分类 基于深度学习的目标检测算法主要分为两大类: Two-stage算法:先进行区域生成(Region Proposal),生成有可能包含待检物体的预选框(Region Proposal),再通过卷积神经网络进行样本分类。常见的Two-stage算法包括R-CNN、Fast R-CNN、Faster R-CNN等。 One-stage算法:不用生成区域提议,直接在网络中提取特征来预测物体分类和位置。常见的One-stage算法包括YOLO系列(YOLOv1、YOLOv2、YOLOv3、YOLOv4、YOLOv5等)、SSD和RetinaNet等。 四、算法原理 以YOLO系列为例,YOLO将目标检测视为回归问题,将输入图像一次性划分为多个区域,直接在输出层预测边界框和类别概率。YOLO采用卷积网络来提取特征,使用全连接层来得到预测值。其网络结构通常包含多个卷积层和全连接层,通过卷积层提取图像特征,通过全连接层输出预测结果。 五、应用领域 目标检测技术已经广泛应用于各个领域,为人们的生活带来了极大的便利。以下是一些主要的应用领域: 安全监控:在商场、银行
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值