mybatis

案例源码地址:https://download.csdn.net/download/gj_user/12236230

一、架构
在这里插入图片描述

SqlMapConfig.xml:mybatis的核心配置文件,主要用于配置数据库连接等一些信息

Mappers.xml:这些配置文件有多个,每一个配置文件对应数据库当中的一张表,主要用于我们数据库中的字段与我们JavaBean实体类中的字段的相互映射,mappers.xml一定要被sqlMapConfig.xml加载

SqlSessionFactory:工厂类,主要用于产生我们的sqlSession

SqlSession:mybatis里面的一个核心的类,用于操作我们的数据库,通过executor来操作我们的数据库,executor是mybaits里面一个封装的对象,不需要我们去处理

MappedStatement:主要作用就是连接我们的输入映射与我们的输出映射,将我们的输入映射拿到之后,去执行我们数据库操作,然后将执行后的结果包装成我们的输出映射

二、案例
创建表sql
CREATE TABLE account (
id int(11) NOT NULL AUTO_INCREMENT,
name varchar(11) NOT NULL COMMENT ‘姓名’,
money double(32) NOT NULL COMMENT ‘金额’,
PRIMARY KEY (id)
) ENGINE=Inno
使用Maven构建项目

添加pom文件

<?xml version="1.0" encoding="UTF-8"?>


4.0.0

com.mc
Java
1.0-SNAPSHOT

org.bgee.log4jdbc-log4j2 log4jdbc-log4j2-jdbc4.1 1.16 org.slf4j slf4j-api 1.7.13 org.slf4j slf4j-log4j12 1.7.5 log4j log4j 1.2.16 org.mybatis mybatis 3.5.4 junit junit 4.13 test junit junit 4.13 compile mysql mysql-connector-java 5.1.32 org.apache.maven.plugins maven-compiler-plugin 1.8 1.8 UTF-8 为了是信息更加详细加入log4j

三、案例
项目结构

编写sqlMapConfig.xml文件

<?xml version="1.0" encoding="UTF-8"?> 编写mapper.xml <?xml version="1.0" encoding="UTF-8" ?> select * from account where id = #{id} javabean;类 public class Account { private int id; private String name; private double money;

public Account() {
// TODO Auto-generated constructor stub
}

public int getId() {
return id;
}

public void setId(int id) {
this.id = id;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public double getMoney() {
return money;
}

public void setMoney(double money) {
this.money = money;
}

@Override
public String toString() {
return “Account [id=” + id + “, name=” + name + “, money=” + money + “]”;
}

}
测试类
@Test
public void select() throws IOException {
SqlSessionFactoryBuilder b =new SqlSessionFactoryBuilder();
SqlSessionFactory factory=b.build(Resources.getResourceAsStream(“sqlMapConfig.xml”));
SqlSession session = factory.openSession();
Account one = session.selectOne(“select”,1);
System.out.println(one);
}

结果

DEBUG [main] - ==> Preparing: select * from account where id = ?
DEBUG [main] - > Parameters: 1(Integer)
DEBUG [main] - <
Total: 1
Account [id=1, name=小明, money=11000.0]

避免重复代码太多可以使用@before注解在每次进行单元测试的时候调用一些重复的初始话代码
SqlSession session;
@Before
public void init() throws IOException {
SqlSessionFactoryBuilder b = new SqlSessionFactoryBuilder();
SqlSessionFactory factory = b.build(Resources.getResourceAsStream(“sqlMapConfig.xml”));
session = factory.openSession();
}
增删改查CRUD
mapper.xml

<?xml version="1.0" encoding="UTF-8" ?> select * from account where id = #{id} select * from account insert into account values (null ,#{name},#{money}) update account set name=#{name},id=#{id},money=#{money}where id=#{id} delete from account where id=#{id} 进行单元测试 public class MyTest { SqlSession session; @Before public void init() throws IOException { SqlSessionFactoryBuilder b = new SqlSessionFactoryBuilder(); SqlSessionFactory factory = b.build(Resources.getResourceAsStream("sqlMapConfig.xml")); session = factory.openSession(); } @Test public void select() throws IOException { // SqlSessionFactoryBuilder b =new SqlSessionFactoryBuilder(); // SqlSessionFactory factory=b.build(Resources.getResourceAsStream("sqlMapConfig.xml")); // SqlSession session = factory.openSession(); Account one = session.selectOne("select",1); System.out.println(one); }

@Test
public void selectALL() {
//查询name带’小’的
List selectList = session.selectList(“selectall”);
session.close();
System.out.println(selectList);
}

@Test
public void insert() {
Account a=new Account();
a.setName(“jason”);
a.setMoney(1234);
session.insert(“insert”, a);
session.commit();
session.close();
}
@Test
public void update() {
Account a=new Account();
a.setId(2);
a.setMoney(1111);
a.setName(“张三”);
session.update(“update”, a);
session.commit();
session.close();
}

@Test
public void delete() {
Account a=new Account();
a.setId(3);
session.update(“delete”, a);
session.commit();
session.close();
}
}
四、 #{}与${}
#{} :这个用来做我们的占位符,不带字符串连接功能
: 这 个 也 是 用 来 做 占 位 符 , 带 有 字 符 串 连 接 功 能 , 常 用 语 模 糊 查 询 案 例 : 模 糊 查 询 @ T e s t p u b l i c v o i d s e l e c t L i k e ( ) / / 查 询 n a m e 带 ′ 小 ′ 的 L i s t < A c c o u n t > s e l e c t L i s t = s e s s i o n . s e l e c t L i s t ( " s e l e c t L i k e " , " j " ) ; s e s s i o n . c l o s e ( ) ; S y s t e m . o u t . p r i n t l n ( s e l e c t L i s t ) ; m a p p e r . x m l < s e l e c t i d = " s e l e c t L i k e " r e s u l t T y p e = " c o m . j d b c . A c c o u n t " > s e l e c t ∗ f r o m a c c o u n t w h e r e n a m e l i k e " {}:这个也是用来做占位符,带有字符串连接功能,常用语模糊查询 案例:模糊查询 @Test public void selectLike() { //查询name带'小'的 List<Account> selectList = session.selectList("selectLike", "j"); session.close(); System.out.println(selectList); } mapper.xml <select id="selectLike" resultType="com.jdbc.Account"> select * from account where name like "% :@TestpublicvoidselectLike()//nameList<Account>selectList=session.selectList("selectLike","j");session.close();System.out.println(selectList);mapper.xml<selectid="selectLike"resultType="com.jdbc.Account">selectfromaccountwherenamelike"{value}%"

五、自增主键获取

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
图像识别技术在病虫害检测中的应用是一个快速发展的领域,它结合了计算机视觉和机器学习算法来自动识别和分类植物上的病虫害。以下是这一技术的一些关键步骤和组成部分: 1. **数据收集**:首先需要收集大量的植物图像数据,这些数据包括健康植物的图像以及受不同病虫害影响的植物图像。 2. **图像预处理**:对收集到的图像进行处理,以提高后续分析的准确性。这可能包括调整亮度、对比度、去噪、裁剪、缩放等。 3. **特征提取**:从图像中提取有助于识别病虫害的特征。这些特征可能包括颜色、纹理、形状、边缘等。 4. **模型训练**:使用机器学习算法(如支持向量机、随机森林、卷积神经网络等)来训练模型。训练过程中,算法会学习如何根据提取的特征来识别不同的病虫害。 5. **模型验证和测试**:在独立的测试集上验证模型的性能,以确保其准确性和泛化能力。 6. **部署和应用**:将训练好的模型部署到实际的病虫害检测系统中,可以是移动应用、网页服务或集成到智能农业设备中。 7. **实时监测**:在实际应用中,系统可以实时接收植物图像,并快速给出病虫害的检测结果。 8. **持续学习**:随着时间的推移,系统可以不断学习新的病虫害样本,以提高其识别能力。 9. **用户界面**:为了方便用户使用,通常会有一个用户友好的界面,显示检测结果,并提供进一步的指导或建议。 这项技术的优势在于它可以快速、准确地识别出病虫害,甚至在早期阶段就能发现问题,从而及时采取措施。此外,它还可以减少对化学农药的依赖,支持可持续农业发展。随着技术的不断进步,图像识别在病虫害检测中的应用将越来越广泛。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值