当前位置: 首页 > news >正文

Mybatis注解方式CRUD数据库

1.Monster类

package com.zzy.entity;import java.util.Date;/*** @author 张志远* @version 1.0* Monster 和 monster表有对应关系* 体现OOP*/
//解读
//1. 一个普通的Pojo类
//2. 使用原生态的sql语句查询结果还是要封装成对象
//3. 要求大家这里的实体类属性名和表名字段保持一致。
public class Monster {//属性-和表字段有对应关系private Integer id;private Integer age;private String name;private String email;private Date birthday;private double salary;private Integer gender;public Monster() {}public Monster(Integer id, Integer age, String name, String email, Date birthday, double salary, Integer gender) {this.id = id;this.age = age;this.name = name;this.email = email;this.birthday = birthday;this.salary = salary;this.gender = gender;}public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getEmail() {return email;}public void setEmail(String email) {this.email = email;}public Date getBirthday() {return birthday;}public void setBirthday(Date birthday) {this.birthday = birthday;}public double getSalary() {return salary;}public void setSalary(double salary) {this.salary = salary;}public Integer getGender() {return gender;}public void setGender(Integer gender) {this.gender = gender;}@Overridepublic String toString() {return "Monster{" +"id=" + id +", age=" + age +", name='" + name + '\'' +", email='" + email + '\'' +", birthday=" + birthday +", salary=" + salary +", gender=" + gender +'}';}
}

2.MonsterAnnotation接口

package com.zzy.mapper;import com.zzy.entity.Monster;
import org.apache.ibatis.annotations.*;import java.util.List;/*
*       使用注解的方式来配置接口方法
*       1. useGeneratedKeys=true, 返回自增的值
*       2. keyProperty="id" 自增值对应的对象属性
*       3. keyColumn = "id" 自增对应的表的字段
**/
public interface MonsterAnnotation {@Insert("INSERT INTO `monster` (`age`, `birthday`, `email`, `gender`, `name`, `salary`)" +"VALUES (#{age}, #{birthday}, #{email}, #{gender}, #{name}, #{salary})")@Options(useGeneratedKeys=true, keyProperty="id",keyColumn = "id")public void addMonster(Monster monster);@Delete(" DELETE FROM `monster` WHERE id = #{id}")public void delMonster(Integer id);@Update("  UPDATE `monster`" +"SET `age`=#{age} , `birthday`= #{birthday}, `email` = #{email},\n" +"`gender` = #{gender} , `name`= #{name}, `salary` = #{salary}\n" +"WHERE id = #{id}")//修改Monsterpublic void updateMonster(Monster monster);@Select("SELECT * FROM `monster` WHERE id = #{id}\n")//查询-根据idpublic Monster getMonsterById(Integer id);@Select("SELECT * FROM `monster`\n")//查询所有的Monsterpublic List<Monster> findAllMonster();
}

3.MonsterMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><!--解读
1. 这是一个mapper xml 文件
2. 该文件可以去实现对应的接口的方法
3. namespace 指定该xml文件和哪个接口对应!!!
-->
<mapper namespace="com.zzy.mapper.MonsterMapper"><!--配置addMonster1. id="addMonster" 就是接口的方法名2. parameterType="com.zzy.entity.Monster" 放入的形参的类型3. 注意"com.zzy.entity.Monster" 可以简写4. 写入sql语句=> 建议,现在sqlyog 写完成-测试通过,再拿过来5. (`age`, `birthday`, `email`, `gender`, `name`, `salary`) 表的字段6. (#{age}, #{birthday}, #{email}, #{gender}, #{name}, #{salary}) 是从传入的monster对象属性值7. 这里 #{age} age 对应monster对象的属性名,其它一样--><insert id="addMonster" parameterType="Monster" useGeneratedKeys="true" keyProperty="id">INSERT INTO `monster`(`age`, `birthday`, `email`, `gender`, `name`, `salary`)VALUES (#{age}, #{birthday}, #{email}, #{gender}, #{name}, #{salary})</insert><!--配置/实现delMonster方法1. 这里 java.lang.Integer 这是Java类型, 可以简写成 Integer2. 这里写入delete--><delete id="delMonster" parameterType="Integer">DELETE FROM `monster` WHERE id = #{id}</delete><!--配置实现 updateMonster1. com.zzy.entity.Monster 可以简写,一会老师讲解.--><update id="updateMonster" parameterType="Monster">UPDATE `monster`SET `age`=#{age} , `birthday`= #{birthday}, `email` = #{email},`gender` = #{gender} , `name`= #{name}, `salary` = #{salary}WHERE id = #{id}</update><!--配置/实现getMonsterById--><select id="getMonsterById" resultType="Monster">SELECT * FROM `monster` WHERE id = #{id}</select><!--配置/实现findAllMonster--><select id="findAllMonster" resultType="Monster">SELECT * FROM `monster`</select>
</mapper>
<mapper namespace="com.zzy.mapper.MonsterMapper">
1. 这是一个mapper xml 文件
2. 该文件可以去实现对应的接口的方法
3. namespace 指定该xml文件和哪个接口对应!!!
<insert id="addMonster" parameterType="Monster" useGeneratedKeys="true" keyProperty="id">INSERT INTO `monster`(`age`, `birthday`, `email`, `gender`, `name`, `salary`)VALUES (#{age}, #{birthday}, #{email}, #{gender}, #{name}, #{salary})
</insert>
配置addMonster1. id="addMonster" 就是接口的方法名2. parameterType="com.zzy.entity.Monster" 放入的形参的类型3. 注意"com.zzy.entity.Monster" 可以简写4. 写入sql语句=> 建议,现在sqlyog 写完成-测试通过,再拿过来5. (`age`, `birthday`, `email`, `gender`, `name`, `salary`) 表的字段6. (#{age}, #{birthday}, #{email}, #{gender}, #{name}, #{salary}) 是从传入的monster对象属性值7. 这里 #{age} age 对应monster对象的属性名,其它一样

4.MyBatisUtils类

package com.zzy.util;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 java.io.IOException;
import java.io.InputStream;/*** @author 张志远* @version 1.0* MyBatisUtils 工具类,可以得到SqlSession*/
public class MyBatisUtils {//属性private static SqlSessionFactory sqlSessionFactory;//编写静态代码块-初始化sqlSessionFactorystatic {try {//指定资源文件, 配置文件mybatis-config.xmlString resource = "mybatis-config.xml";//获取到配置文件mybatis-config.xml 对应的inputStream//这里说明:加载文件时,默认到resources目录=>运行后的工作目录target-classesInputStream resourceAsStream = Resources.getResourceAsStream(resource);sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);System.out.println("sqlSessionFactory="+ sqlSessionFactory.getClass());} catch (IOException e) {e.printStackTrace();}}//编写方法,返回SqlSession对象-会话public static SqlSession getSqlSession() {return sqlSessionFactory.openSession();}
}

5.mybatis.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration><!--配置MyBatis自带的日志输出-查看原生的sql--><settings><setting name="logImpl" value="STDOUT_LOGGING"/></settings><!--配置别名--><typeAliases><typeAlias type="com.zzy.entity.Monster" alias="Monster"/></typeAliases><environments default="development"><environment id="development"><!--配置事务管理器--><transactionManager type="JDBC"/><!--配置数据源--><dataSource type="POOLED"><!--配置驱动--><property name="driver" value="com.mysql.jdbc.Driver"/><!--配置连接mysql-url解读:1. jdbc:mysql 协议2. 127.0.0.1:3306 : 指定连接mysql的ip+port3. mybatis: 连接的DB4. useSSL=true 表示使用安全连接5. &amp; 表示 & 防止解析错误6. useUnicode=true : 使用unicode 作用是防止编码错误7. characterEncoding=UTF-8 指定使用utf-8, 防止中文乱码8. 温馨提示:不要背,直接使用即可--><property name="url" value="jdbc:mysql://127.0.0.1:3306/mybatis?useSSL=true&amp;useUnicode=true&amp;characterEncoding=UTF-8"/><property name="username" value="root"/><property name="password" value="253891"/></dataSource></environment></environments><!--说明1. 这里我们配置需要关联的Mapper.xml2. 这里我们可以通过菜单 Path from source root--><mappers><mapper resource="com/zzy/mapper/MonsterMapper.xml"/><!--如果我们通过注解的方式,可不在使用 MonsterMapper.xml但在 mybatis-config.xml注册/引用含注解的类如果没用引用,不能使用
--><mapper class="com.zzy.mapper.MonsterAnnotation"/></mappers>
</configuration>

6.MonsterAnnotationTest类

package com.zzy.mapper;import com.zzy.entity.Monster;
import com.zzy.util.MyBatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Before;
import org.junit.Test;import java.util.Date;
import java.util.List;public class MonsterAnnotationTest {//属性private SqlSession sqlSession;private MonsterAnnotation monsterAnnotation;@Beforepublic void init() {//获取到sqlSessionsqlSession = MyBatisUtils.getSqlSession();//获取到到MonsterMapper对象 class com.sun.proxy.$Proxy7 代理对象//, 底层是使用了动态代理机制, 后面我们自己实现mybatis底层机制时,会讲到monsterAnnotation = sqlSession.getMapper(MonsterAnnotation.class);System.out.println("monsterMapper=" + monsterAnnotation.getClass());}@Testpublic void Test_IsNo_Link() {System.out.println("可以使用................");}@Testpublic void addMonster(){Monster monster = new Monster();monster.setAge(40);monster.setBirthday(new Date());monster.setEmail("kate3@qq.com");monster.setGender(1);monster.setName("狐狸精-2");monster.setSalary(1000 );monsterAnnotation.addMonster(monster);//如果是增删改, 需要提交事务if(sqlSession != null) {sqlSession.commit();sqlSession.close();System.out.println("保存成功...");System.out.println("添加后monster-id=" + monster.getId());}}@Testpublic void findAllMonster() {List<Monster> monsters = monsterAnnotation.findAllMonster();for (Monster monster : monsters) {System.out.println("monster-" + monster);}if(sqlSession != null) {sqlSession.close();}System.out.println("查询成功~");}
}

7.pox.xml(父类的)

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><!--解读1. 将mybatis作为父项目管理多个子模块/子项目2. 父项目的完整的坐标 groupId[组织名]+artifactId[项目名]3. 后面该父项目会管理多个子模块/子项目 , 将来父项目中的引入的依赖可以直接给子项目用, 这样开发简单,提高复用性,也便于管理4. <packaging>pom</packaging> 表示父项目以多个子模块/子项目管理工程--><groupId>com.zzy</groupId><artifactId>mybatis</artifactId><version>1.0-SNAPSHOT</version><packaging>pom</packaging><!--modules指定管理的哪些子模块--><modules><module>mybatis_quickstart</module></modules><!--加入依赖--><dependencies><!--mysql依赖--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.33</version></dependency><!--mybatis依赖--><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.7</version></dependency><!--junit依赖--><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><!--如果这里有一个scope-test 表示该jar的作用范围在test目录, 后面老韩还有有专门讲解maven --><!--<scope>test</scope>--></dependency></dependencies><properties><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><!--在build中配置resources,来防止我们资源导出失败的问题解读:1. 不同的idea/maven 可能提示的错误不一样2. 不变应万变,少什么文件,就增加相应配置即可3. 含义是将 src/main/java目录和子目录 和 src/main/resources目录和子目录的资源文件 xml 和 properties在build项目时,导出到对应的target目录下--><build><resources><resource><directory>src/main/java</directory><includes><include>**/*.xml</include></includes></resource><resource><directory>src/main/resources</directory><includes><include>**/*.xml</include><include>**/*.properties</include></includes></resource></resources></build></project>

8.pom.xml(子类)

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><!--解读1. parent指定了该模块的父项目的完整坐标 groupId+artifactId2. artifactId 子模块的名称3. 当前模块的groupId 就是 com.zzy4. 这里配置后, 该模块就可以使用/引用到父项目的依赖--><parent><groupId>com.zzy</groupId><artifactId>mybatis</artifactId><version>1.0-SNAPSHOT</version></parent><artifactId>mybatis_quickstart</artifactId><properties><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties></project>

http://www.dtcms.com/a/537356.html

相关文章:

  • 漳州台商投资区建设局网站oa软件开发
  • 手机网站这么做链接建站公司走量渠道
  • 深入了解C++11第一讲 -- thread和mutex
  • 航电系统动力模块技术解析
  • 数据结构(11)
  • 什么网站好哪里公司建设网站好
  • 通过python脚本判断两个多语言properties的差异,并生成缺失的文件
  • python ThreadPoolExecutor基础
  • 昆山网站建设方案优化公司线下推广的方式有哪些
  • 基于微信公众号开发网站开发上海网络推广培训学校
  • 我的全栈学习之旅:Celery(持续更新!!!)
  • 【Linux】xargs命令
  • CCUT应用OJ题解——贪吃的松鼠
  • [已解决]Python将COCO格式实例分割数据集转换为YOLO格式
  • CSS Backgrounds (背景)
  • Blender入门学习08 - 骨骼绑定
  • 家装设计网站开发企业做网站大概多少钱
  • TCP/UDP端口、IP协议号与路由协议 强行记忆点总结
  • (一)React面试()
  • 配置文件加载顺序与优先级规则
  • 数字化转型迫在眉睫,企业应该如何面对?
  • 做网站百度云网站登录不了
  • HF4054H-B 50V耐压 集成6.1V过压保护和1.3A过流保护 42V热拔插性能的500mA锂电池线性充电芯片
  • 网站可以做音频线吗网站如何安装源码
  • 小学校园文化建设网站网站打不开显示asp
  • 142.DDR报错bank32,33,34
  • Android性能优化深度解析与实际案例
  • 网站素材网站建设的目标和需求
  • 与您探讨电子元器件结构陶瓷(陶瓷基板)的分类及结构陶瓷的应用
  • 模板建站自适应互联网网站分了