java持久层相关
2022-04-21 12:52:37 7 举报
AI智能生成
java持久层相关
作者其他创作
大纲/内容
4、mybatis
xml
<?xml version="1.0" encoding="UTF-8"?><br><!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"><br><mapper namespace="com.jieer.springbootmybatis.mybatis.mapper.UserMapper"><br> <resultMap id="BaseResultMap" type="com.jieer.springbootmybatis.mybatis.domain.User"><br> <id column="id" jdbcType="INTEGER" property="id"/><br> <result column="name" jdbcType="VARCHAR" property="name"/><br> <result column="age" jdbcType="INTEGER" property="age"/><br> <result column="remark" jdbcType="VARCHAR" property="remark"/><br> </resultMap><br> <sql id="Base_Column_List"><br> id, name, age, remark<br> </sql><br> <select id="selectByPrimaryKey" parameterType="java.lang.Integer" resultMap="BaseResultMap"><br> select<br> <include refid="Base_Column_List"/><br> from user<br> where id = #{id,jdbcType=INTEGER}<br> </select><br> <delete id="deleteByPrimaryKey" parameterType="java.lang.Integer"><br> delete from user<br> where id = #{id,jdbcType=INTEGER}<br> </delete><br> <insert id="insert" parameterType="com.jieer.springbootmybatis.mybatis.domain.User"><br> insert into user (id, name, age,<br> remark)<br> values (#{id,jdbcType=INTEGER}, #{name,jdbcType=VARCHAR}, #{age,jdbcType=INTEGER},<br> #{remark,jdbcType=VARCHAR})<br> </insert><br> <insert id="insertSelective" parameterType="com.jieer.springbootmybatis.mybatis.domain.User"><br> insert into user<br> <trim prefix="(" suffix=")" suffixOverrides=","><br> <if test="id != null"><br> id,<br> </if><br> <if test="name != null"><br> name,<br> </if><br> <if test="age != null"><br> age,<br> </if><br> <if test="remark != null"><br> remark,<br> </if><br> </trim><br> <trim prefix="values (" suffix=")" suffixOverrides=","><br> <if test="id != null"><br> #{id,jdbcType=INTEGER},<br> </if><br> <if test="name != null"><br> #{name,jdbcType=VARCHAR},<br> </if><br> <if test="age != null"><br> #{age,jdbcType=INTEGER},<br> </if><br> <if test="remark != null"><br> #{remark,jdbcType=VARCHAR},<br> </if><br> </trim><br> </insert><br> <update id="updateByPrimaryKeySelective" parameterType="com.jieer.springbootmybatis.mybatis.domain.User"><br> update user<br> <set><br> <if test="name != null"><br> name = #{name,jdbcType=VARCHAR},<br> </if><br> <if test="age != null"><br> age = #{age,jdbcType=INTEGER},<br> </if><br> <if test="remark != null"><br> remark = #{remark,jdbcType=VARCHAR},<br> </if><br> </set><br> where id = #{id,jdbcType=INTEGER}<br> </update><br> <update id="updateByPrimaryKey" parameterType="com.jieer.springbootmybatis.mybatis.domain.User"><br> update user<br> set name = #{name,jdbcType=VARCHAR},<br> age = #{age,jdbcType=INTEGER},<br> remark = #{remark,jdbcType=VARCHAR}<br> where id = #{id,jdbcType=INTEGER}<br> </update><br></mapper><br>
5、mybatis plus
继承IService
<?xml version="1.0" encoding="UTF-8"?><br><!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"><br><mapper namespace="com.jieer.domain.mapper.ProductMapper"><br><br></mapper><br>
package com.jieer.domain.service;<br><br>import com.jieer.domain.entity.Product;<br>import com.baomidou.mybatisplus.extension.service.IService;<br><br>/**<br> * <p><br> * 产品基本信息 服务类<br> * </p><br> *<br> * @author felix<br> * @since 2022-01-26<br> */<br>public interface IProductService extends IService<Product> {<br><br>}<br>
相关概念
ORM 是Object-Relation-Mapping,即对象关系影射技术,是对象持久化的核心
Java Persistence API 是一种标准技术,可让您将对象“映射”到关系数据库。spring-boot-starter-data-jpaPOM 提供了一种快速入门的方法。
Hibernate:最流行的 JPA 实现之一。
Spring Data JPA:帮助您实现基于 JPA 的存储库。<br>
Spring ORM:来自 Spring Framework 的核心 ORM 支持。
个人理解:
1、java连接数据库。例如<br>1.得到数据库驱动程序<br>2.创建数据库连接<br>3.执行SQL语句<br>4.得到结果集<br>5.对结果集做相应的处理(增,删,改,查)<br>6.关闭资源:这里释放的是DB中的资源<br>繁琐
2、spring集成了jdbc模板,jdbcTemplate,让程序员只关注sql
问题:存在代码量大,特别是访问字段较多的表的时候,代码显得繁琐、累赘,容易出错
3、面对对象的开发,ORM(对象关系映射的一种思想),对象映射到数据库技术<br>
hibernate
全映射,连sql都可自动生成
mybatis(上一代:ibatis,下一代:mybatis-plus)
半映射,手动在xml修改sql语句,封装少、高性能、可优化
4、这么多ORM框架,需要统一下,出现JPA技术思想,形成一种统一的规范
参考
https://blog.csdn.net/t131452n/article/details/78428917?spm=1001.2101.3001.6650.3&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-3.pc_relevant_default&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-3.pc_relevant_default&utm_relevant_index=6
1、jdbc api
jdbcTemplate
package com.example.relationaldataaccess;<br><br>import org.slf4j.Logger;<br>import org.slf4j.LoggerFactory;<br>import org.springframework.beans.factory.annotation.Autowired;<br>import org.springframework.boot.CommandLineRunner;<br>import org.springframework.boot.SpringApplication;<br>import org.springframework.boot.autoconfigure.SpringBootApplication;<br>import org.springframework.jdbc.core.JdbcTemplate;<br><br>import java.util.Arrays;<br>import java.util.List;<br>import java.util.stream.Collectors;<br><br>@SpringBootApplication<br>public class RelationalDataAccessApplication implements CommandLineRunner {<br><br> private static final Logger log = LoggerFactory.getLogger(RelationalDataAccessApplication.class);<br><br> public static void main(String args[]) {<br> SpringApplication.run(RelationalDataAccessApplication.class, args);<br> }<br><br> @Autowired<br> JdbcTemplate jdbcTemplate;<br><br> @Override<br> public void run(String... strings) throws Exception {<br><br> log.info("Creating tables");<br><br> jdbcTemplate.execute("DROP TABLE customers IF EXISTS");<br> jdbcTemplate.execute("CREATE TABLE customers(" +<br> "id SERIAL, first_name VARCHAR(255), last_name VARCHAR(255))");<br><br> // Split up the array of whole names into an array of first/last names<br> List<Object[]> splitUpNames = Arrays.asList("John Woo", "Jeff Dean", "Josh Bloch", "Josh Long").stream()<br> .map(name -> name.split(" "))<br> .collect(Collectors.toList());<br><br> // Use a Java 8 stream to print out each tuple of the list<br> splitUpNames.forEach(name -> log.info(String.format("Inserting customer record for %s %s", name[0], name[1])));<br><br> // Uses JdbcTemplate's batchUpdate operation to bulk load data<br> jdbcTemplate.batchUpdate("INSERT INTO customers(first_name, last_name) VALUES (?,?)", splitUpNames);<br><br> log.info("Querying for customer records where first_name = 'Josh':");<br> jdbcTemplate.query(<br> "SELECT id, first_name, last_name FROM customers WHERE first_name = ?", new Object[] { "Josh" },<br> (rs, rowNum) -> new Customer(rs.getLong("id"), rs.getString("first_name"), rs.getString("last_name"))<br> ).forEach(customer -> log.info(customer.toString()));<br> }<br>}
2、spring data jpa
CrudRepository
3、spring data jdbc
0 条评论
下一页