【愚公系列】2023年10月 Java教学课程 111

阅读: 评论:0

【愚公系列】2023年10月 Java教学课程 111

【愚公系列】2023年10月 Java教学课程 111

🏆 作者简介,愚公搬代码
🏆《头衔》:华为云特约编辑,华为云云享专家,华为开发者专家,华为产品云测专家,CSDN博客专家,阿里云专家博主,腾讯云优秀博主,掘金优秀博主,51CTO博客专家等。
🏆《近期荣誉》:2022年CSDN博客之星TOP2,2022年华为云十佳博主等。
🏆《博客内容》:.NET、Java、Python、Go、Node、前端、IOS、Android、鸿蒙、Linux、物联网、网络安全、大数据、人工智能、U3D游戏、小程序等相关领域知识。
🏆🎉欢迎 👍点赞✍评论⭐收藏

文章目录

  • 🚀一.Mybatis快速入门
    • 🔎1.框架介绍
    • 🔎2.ORM介绍
    • 🔎3.什么是Mybatis
    • 🔎4.Mybatis的快速入门
      • 🦋4.1 环境搭建
      • 🦋4.2 StudentMapper搭建
      • 🦋4.3 StudentService搭建
      • 🦋4.4 StudentController搭建
      • 🦋4.5 运行
    • 🔎5.MyBatis的自增主键
      • 🦋5.1 注解形式
      • 🦋5.2 XML形式
  • 🚀二、MyBatis的相关api
    • 🔎1.Resources
    • 🔎2.构建器SqlSessionFactoryBuilder
    • 🔎3.工厂对象SqlSessionFactory
    • 🔎4.SqlSession会话对象
  • 🚀感谢:给读者的一封信


🚀一.Mybatis快速入门

🔎1.框架介绍

软件框架是一种用于开发软件应用程序的解决方案,它是一个可重用的结构,可以帮助开发人员设计和实现应用程序,提高代码的可重用性、可维护性和可扩展性。软件框架通常包含了开发应用程序所需的各种工具、函数库、模型和接口,以及规范和指导开发人员如何组织和编写代码。

软件框架的主要优势在于它可以减少应用程序开发的时间和开发成本,并提供了一种标准和一致的编码方式,从而增加了代码的可读性和可维护性。此外,软件框架还可以提高代码的可重用性,使得开发人员可以更加高效地构建和组织代码。

软件框架通常被分为三种类型:

  1. 概念性框架:这种框架主要提供了一个概念和理论上的模型,帮助开发人员思考和解决问题,但它并没有提供具体的编码实现。

  2. 基础性框架:这种框架提供了一些基本的工具和函数库,帮助开发人员快速构建代码和应用程序。

  3. 应用性框架:这种框架提供了一种特定的解决方案,帮助开发人员快速实现应用程序,比如常见的 web 应用程序框架、数据库访问框架、UI 库等。

软件框架是一种重要的软件开发工具,它可以提高代码的可重用性、可维护性和可扩展性,降低应用程序的开发成本,提高开发效率。为了充分利用软件框架,开发人员需要熟悉框架的特点和使用方法,并根据实际需求选择合适的框架进行开发。

🔎2.ORM介绍

ORM全称为Object-Relational Mapping,即对象关系映射,是一种将面向对象编程语言中的对象模型与关系型数据库中的关系模型进行转换的技术。ORM工具可以使开发者使用面向对象的方式操作数据库,无需编写SQL语句,从而减少了数据库操作的代码量,提高了开发效率。

ORM工具可以自动生成SQL语句、处理数据库连接、执行数据操作、封装数据操作结果等。常见的ORM框架有Hibernate、MyBatis、Entity Framework等。ORM技术在Web开发、数据分析、企业应用等领域有广泛应用。

🔎3.什么是Mybatis

MyBatis 是一种数据持久层框架,它主要解决了应用程序中数据库访问和数据存储的问题。MyBatis 通过 SQL 映射文件将 Java 对象与 SQL 语句映射起来,从而实现了数据查询、插入、更新和删除等操作。

MyBatis 框架的核心优势在于它是一款轻量级的持久层框架,它的体积小、配置简单,而且可以与其他框架如 Spring 等集成使用。

MyBatis 框架的主要特点如下:

  1. SQL 映射文件:通过 SQL 映射文件将 Java 对象与 SQL 语句映射起来,从而实现了数据查询、插入、更新和删除等操作。

  2. 动态 SQL:MyBatis 支持使用动态 SQL 来构建复杂的 SQL 查询语句,从而实现了更加灵活的数据查询。

  3. 缓存机制:MyBatis 框架支持缓存机制,可以有效地提高应用程序的性能,降低数据库的访问压力。

  4. 可扩展性:MyBatis 框架提供了丰富的插件机制和扩展接口,可以灵活地扩展和定制自己的数据访问层。

MyBatis 是一款简单、灵活、高效的持久层框架,特别适用于中小型的 Web 应用程序。

MyBatis官网地址:.html 、/

MyBatis属于JavaEE三层架构:表现层、业务层、持久层

🔎4.Mybatis的快速入门

MyBatis开发步骤:

  1. 添加MyBatis的jar包
  2. 创建Student数据表
  3. 编写Studentr实体类
  4. 编写映射文件l
  5. 编写核心文件l
  6. 编写测试类

🦋4.1 环境搭建

  1. 导入MyBatis的jar包
<dependencies><!--单元测试--><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope></dependency><!--MySQL驱动--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.46</version></dependency><!--log4j驱动--><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.17</version></dependency><!--MyBatis核心包--><dependency><groupId&batis</groupId><artifactId>mybatis</artifactId><version>3.5.5</version></dependency>
</dependencies>
  1. 创建student数据表

  1. 编写Student实体
package com.itheima.bean;public class Student {private Integer id;private String name;private Integer age;public Student() {}public Student(Integer id, String name, Integer age) {this.id = id;this.name = name;this.age = age;}public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}@Overridepublic String toString() {return "Student{" +"id=" + id +", name='" + name + ''' +", age=" + age +'}';}
}

4)编写jdbc.properties映射文件

driver&#sql.cj.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3306/db1
username=root
password=123456

5)编写log4j.properties映射文件

# Global logging configuration
# ERROR WARN INFO DEBUG
Logger=DEBUG, stdout
# 
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

6)编写l映射文件

<?xml version="1.0" encoding="UTF-8" ?>
<!--MyBatis的DTD约束-->
<!DOCTYPE configuration PUBLIC "-//mybatis//DTD Config 3.0//EN" ".dtd"><!--configuration 核心根标签-->
<configuration><!--引入数据库连接的配置文件--><properties resource="jdbc.properties"/><!--配置LOG4J--><settings><setting name="logImpl" value="log4j"/></settings><!--起别名--><typeAliases><typeAlias type="com.itheima.bean.Student" alias="student"/><!--<package name="com.itheima.bean"/>--></typeAliases><!--environments配置数据库环境,环境可以有多个。default属性指定使用的是哪个--><environments default="mysql"><!--environment配置数据库环境  id属性唯一标识--><environment id="mysql"><!-- transactionManager事务管理。  type属性,采用JDBC默认的事务--><transactionManager type="JDBC"></transactionManager><!-- dataSource数据源信息   type属性 连接池--><dataSource type="POOLED"><!-- property获取数据库连接的配置信息 --><property name="driver" value="${driver}" /><property name="url" value="${url}" /><property name="username" value="${username}" /><property name="password" value="${password}" /></dataSource></environment></environments><!-- mappers引入映射配置文件 --><mappers><!-- mapper 引入指定的映射配置文件   resource属性指定映射配置文件的名称 --><mapper resource=&#l"/><!-- 多个mapper可以使用包扫描的方式简化SQL映射文件的加载 --><!-- <package name="com.itheima.mapper"/> --></mappers>
</configuration>

7)编写l映射文件

<?xml version="1.0" encoding="UTF-8" ?>
<!--MyBatis的DTD约束-->
<!DOCTYPE mapperPUBLIC "-//mybatis//DTD Mapper 3.0//EN"".dtd"><!--mapper:核心根标签namespace属性:名称空间
-->
<mapper namespace="StudentMapper"><!--select:查询功能的标签id属性:唯一标识resultType属性:指定结果映射对象类型parameterType属性:指定参数映射对象类型--><select id="selectAll" resultType="student">SELECT * FROM student</select><select id="selectById" resultType="student" parameterType="int">SELECT * FROM student WHERE id = #{id}</select><insert id="insert" parameterType="student">INSERT INTO student VALUES (#{id},#{name},#{age})</insert><update id="update" parameterType="student">UPDATE student SET name = #{name},age = #{age} WHERE id = #{id}</update><delete id="delete" parameterType="int">DELETE FROM student WHERE id = #{id}</delete>
</mapper>

🦋4.2 StudentMapper搭建

package com.itheima.service;import com.itheima.bean.Student;import java.util.List;
/*业务层接口*/
public interface StudentMapper {//查询全部public abstract List<Student> selectAll();//根据id查询public abstract Student selectById(Integer id);//新增数据public abstract Integer insert(Student stu);//修改数据public abstract Integer update(Student stu);//删除数据public abstract Integer delete(Integer id);
}
package com.itheima.mapper.impl;import com.itheima.bean.Student;
import com.itheima.mapper.StudentMapper;
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;
import java.util.List;
/*持久层实现类*/
public class StudentMapperImpl implements StudentMapper {/*查询全部*/@Overridepublic List<Student> selectAll() {List<Student> list = null;SqlSession sqlSession = null;InputStream is = null;try{//1.加载核心配置文件is = ResourceAsStream(&#l");//2.获取SqlSession工厂对象SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);//3.通过工厂对象获取SqlSession对象sqlSession = sqlSessionFactory.openSession(true);//4.执行映射配置文件中的sql语句,并接收结果list = sqlSession.selectList("StudentMapper.selectAll");4.获取执行SQL的代理对象//StudentMapper studentMapper = Mapper(StudentMapper.class);5.执行sql//list = studentMapper.selectAll();} catch (Exception e) {e.printStackTrace();} finally {//5.释放资源if(sqlSession != null) {sqlSession.close();}if(is != null) {try {is.close();} catch (IOException e) {e.printStackTrace();}}}//6.返回结果return list;}/*根据id查询*/@Overridepublic Student selectById(Integer id) {Student stu = null;SqlSession sqlSession = null;InputStream is = null;try{//1.加载核心配置文件is = ResourceAsStream(&#l");//2.获取SqlSession工厂对象SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);//3.通过工厂对象获取SqlSession对象sqlSession = sqlSessionFactory.openSession(true);//4.执行映射配置文件中的sql语句,并接收结果stu = sqlSession.selectOne("StudentMapper.selectById",id);} catch (Exception e) {e.printStackTrace();} finally {//5.释放资源if(sqlSession != null) {sqlSession.close();}if(is != null) {try {is.close();} catch (IOException e) {e.printStackTrace();}}}//6.返回结果return stu;}/*新增功能*/@Overridepublic Integer insert(Student stu) {Integer result = null;SqlSession sqlSession = null;InputStream is = null;try{//1.加载核心配置文件is = ResourceAsStream(&#l");//2.获取SqlSession工厂对象SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);//3.通过工厂对象获取SqlSession对象sqlSession = sqlSessionFactory.openSession(true);//4.执行映射配置文件中的sql语句,并接收结果result = sqlSession.insert("StudentMapper.insert",stu);} catch (Exception e) {e.printStackTrace();} finally {//5.释放资源if(sqlSession != null) {sqlSession.close();}if(is != null) {try {is.close();} catch (IOException e) {e.printStackTrace();}}}//6.返回结果return result;}/*修改功能*/@Overridepublic Integer update(Student stu) {Integer result = null;SqlSession sqlSession = null;InputStream is = null;try{//1.加载核心配置文件is = ResourceAsStream(&#l");//2.获取SqlSession工厂对象SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);//3.通过工厂对象获取SqlSession对象sqlSession = sqlSessionFactory.openSession(true);//4.执行映射配置文件中的sql语句,并接收结果result = sqlSession.update("StudentMapper.update",stu);} catch (Exception e) {e.printStackTrace();} finally {//5.释放资源if(sqlSession != null) {sqlSession.close();}if(is != null) {try {is.close();} catch (IOException e) {e.printStackTrace();}}}//6.返回结果return result;}/*删除功能*/@Overridepublic Integer delete(Integer id) {Integer result = null;SqlSession sqlSession = null;InputStream is = null;try{//1.加载核心配置文件is = ResourceAsStream(&#l");//2.获取SqlSession工厂对象SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);//3.通过工厂对象获取SqlSession对象sqlSession = sqlSessionFactory.openSession(true);//4.执行映射配置文件中的sql语句,并接收结果result = sqlSession.delete("StudentMapper.delete",id);} catch (Exception e) {e.printStackTrace();} finally {//5.释放资源if(sqlSession != null) {sqlSession.close();}if(is != null) {try {is.close();} catch (IOException e) {e.printStackTrace();}}}//6.返回结果return result;}
}

🦋4.3 StudentService搭建

package com.itheima.service;import com.itheima.bean.Student;import java.util.List;
/*业务层接口*/
public interface StudentService {//查询全部public abstract List<Student> selectAll();//根据id查询public abstract Student selectById(Integer id);//新增数据public abstract Integer insert(Student stu);//修改数据public abstract Integer update(Student stu);//删除数据public abstract Integer delete(Integer id);
}
package com.itheima.service.impl;import com.itheima.bean.Student;
import com.itheima.mapper.StudentMapper;
import com.itheima.mapper.impl.StudentMapperImpl;
import com.itheima.service.StudentService;import java.util.List;
/*业务层实现类*/
public class StudentServiceImpl implements StudentService {//创建持久层对象private StudentMapper mapper = new StudentMapperImpl();@Overridepublic List<Student> selectAll() {return mapper.selectAll();}@Overridepublic Student selectById(Integer id) {return mapper.selectById(id);}@Overridepublic Integer insert(Student stu) {return mapper.insert(stu);}@Overridepublic Integer update(Student stu) {return mapper.update(stu);}@Overridepublic Integer delete(Integer id) {return mapper.delete(id);}
}

🦋4.4 StudentController搭建

package ller;import com.itheima.bean.Student;
import com.itheima.service.StudentService;
import com.itheima.service.impl.StudentServiceImpl;import java.util.List;/*控制层测试类*/
public class StudentController {//创建业务层对象private StudentService service = new StudentServiceImpl();//查询全部功能测试public void selectAll() {List<Student> students = service.selectAll();for (Student stu : students) {System.out.println(stu);}}//根据id查询功能测试public void selectById() {Student stu = service.selectById(3);System.out.println(stu);}//新增功能测试public void insert() {Student stu = new Student(4,"赵六",26);Integer result = service.insert(stu);System.out.println(result);}//修改功能测试public void update() {Student stu = new Student(4,"赵六",16);Integer result = service.update(stu);System.out.println(result);}//删除功能测试public void delete() {Integer result = service.delete(4);System.out.println(result);}
}

🦋4.5 运行

package com.itheima;import ller.StudentController;public class Main {public static void main(String[] args) {StudentController stu=new StudentController();stu.selectAll();}
}

🔎5.MyBatis的自增主键

🦋5.1 注解形式

MyBatis中的useGeneratedKeys和keyProperty都是用于指定自动生成的主键的。useGeneratedKeys用于指定是否使用自动生成的主键,而keyProperty用于指定该主键对应的Java对象属性。

useGeneratedKeys的取值可以是true或false,默认为false。当设置为true时,表示使用数据库自动生成的主键值,MyBatis会将该值赋给对应Java对象的属性。在执行插入操作后,需要通过selectKey或者insert方法的第二个参数来告诉MyBatis要返回自动生成的主键值。

keyProperty用于指定从数据库生成的主键值要赋值给Java对象的哪个属性。它的值是一个字符串,表示对应的属性名。例如,如果你的Java对象中定义了一个名为id的属性,那么可以将keyProperty设置为"id",这样在自动生成主键后,MyBatis就会将该主键值设置到id属性中。

举一个例子,假设我们有一个Student类,其中包含id,name和age属性,我们需要将一个新的Student对象插入到数据库中,并返回自动生成的id值,代码如下:

public interface StudentMapper {@Insert("INSERT INTO student(name,age) VALUES(#{name},#{age})")@Options(useGeneratedKeys = true, keyProperty = "id")int insertStudent(Student student);
}

在上面的代码中,@Options注解中的useGeneratedKeys属性值为true,表示使用自动生成的主键值;keyProperty属性值为"id",表示将生成的主键值赋值给Java对象的id属性。

这样,在执行insertStudent方法后,MyBatis会将自动生成的主键值赋值给对应的Java对象的id属性。

🦋5.2 XML形式

以下是一个示例:

<insert id="insertStudent" parameterType="Student" useGeneratedKeys="true" keyProperty="id">INSERT INTO student(name, age) VALUES(#{name}, #{age})
</insert>

在上面的示例中,useGeneratedKeys属性设置为true表示使用数据库自动生成的主键值,而keyProperty属性指定了将该值赋值给哪个Java对象的属性(在这个例子中是id)。当MyBatis执行该映射语句时,它会通过主键来获取自动生成的值,并将该值设置到指定的Java对象属性中。

需要注意的是,如果表中有多个主键列,则应该使用keyColumn属性来指定将值分配给Java对象属性的哪一列。例如:

<insert id="insertStudent" parameterType="Student" useGeneratedKeys="true" keyProperty="id" keyColumn="student_id">INSERT INTO student(name, age) VALUES(#{name}, #{age})
</insert>

在上面的示例中,keyColumn属性指定了自动生成的主键值应该赋值给表中名称为student_id的列,而keyProperty属性则指定了对应的Java对象属性。

🚀二、MyBatis的相关api

🔎1.Resources

  • org.apache.ibatis.io.Resources:加载资源的工具类。

  • 核心方法

🔎2.构建器SqlSessionFactoryBuilder

  • org.apache.ibatis.session.SqlSessionFactoryBuilder:获取 SqlSessionFactory 工厂对象的功能类

  • 核心方法

  • 通过加载mybatis的核心文件的输入流的形式构建一个SqlSessionFactory对象

String resource = "org/mybatis/l"; 
InputStream inputStream = ResourceAsStream(resource); 
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder(); 
SqlSessionFactory factory = builder.build(inputStream);

其中, Resources 工具类,这个类在 org.apache.ibatis.io 包中。Resources 类帮助你从类路径下、文件系统或一个 web URL 中加载资源文件。

🔎3.工厂对象SqlSessionFactory

  • org.apache.ibatis.session.SqlSessionFactory:获取 SqlSession 构建者对象的工厂接口。

  • 核心api

🔎4.SqlSession会话对象

  • org.apache.ibatis.session.SqlSession:构建者对象接口。用于执行 SQL、管理事务、接口代理。

  • 核心api

SqlSession 实例在 MyBatis 中是非常强大的一个类。在这里你会看到所有执行语句、提交或回滚事务和获取映射器实例的方法。


🚀感谢:给读者的一封信

亲爱的读者,

我在这篇文章中投入了大量的心血和时间,希望为您提供有价值的内容。这篇文章包含了深入的研究和个人经验,我相信这些信息对您非常有帮助。

如果您觉得这篇文章对您有所帮助,我诚恳地请求您考虑赞赏1元钱的支持。这个金额不会对您的财务状况造成负担,但它会对我继续创作高质量的内容产生积极的影响。

我之所以写这篇文章,是因为我热爱分享有用的知识和见解。您的支持将帮助我继续这个使命,也鼓励我花更多的时间和精力创作更多有价值的内容。

如果您愿意支持我的创作,请扫描下面二维码,您的支持将不胜感激。同时,如果您有任何反馈或建议,也欢迎与我分享。

再次感谢您的阅读和支持!

最诚挚的问候, “愚公搬代码”

本文发布于:2024-01-30 19:07:31,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170661285222190.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:愚公   课程   系列   Java
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23