简约、时尚、高端 网站建设,长春市建设工程造价管理协会网站,网站建设的ci设计指的是什么,可商用的图片素材网站一、ORM框架
当今企业级应用的开发环境中#xff0c;对象和关系数据是业务实体的两种表现形式。业务实体在内存中表现为对象#xff0c;在数据库中变现为关系数据。当采用面向对象的方法编写程序时#xff0c;一旦需要访问数据库#xff0c;就需要回到关系数据的访问方式对象和关系数据是业务实体的两种表现形式。业务实体在内存中表现为对象在数据库中变现为关系数据。当采用面向对象的方法编写程序时一旦需要访问数据库就需要回到关系数据的访问方式这种转换为开发人员带来了很大的麻烦。 ORM框架是一个对象-关系映射的系统化解决方案当ORM框架完成转换后开发人员可以直接取用对象。常用的ORM框架有Hibernate和MyBatis其作用是将数据库查询的数据封装为实体类对象。 ORM框架将数据库查询到的数据封装为实体类对象ORM映射流程如上图所示。从图中可以看出实体类与数据库之间通过ORM框架相互映射应用程序可以直接获取映射完成的实体类。
二、MyBatis简介
MyBatis 是一款优秀的持久层框架它支持自定义 SQL、存储过程以及高级映射。MyBatis免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJOPlain Old Java Objects普通老式 Java 对象为数据库中的记录。 MyBatis解决的问题 三、入门案例——实现步骤
1、创建一个基于Maven的java项目添加mysql和MyBatis的依赖
!-- mybatis的依赖 --
dependencygroupIdorg.mybatis/groupIdartifactIdmybatis/artifactIdversion3.4.6/version
/dependency
!-- mysql-connector-java 的依赖 --
dependencygroupIdmysql/groupIdartifactIdmysql-connector-java/artifactIdversion5.1.6/version
/dependency
2、添加mybatis核心配置文件
?xml version1.0 encodingUTF-8 ?
!DOCTYPE configurationPUBLIC -//mybatis.org//DTD Config 3.0//ENhttp://mybatis.org/dtd/mybatis-3-config.dtd
configurationenvironments defaultdevelopmentenvironment iddevelopmenttransactionManager typeJDBC/dataSource typePOOLEDproperty namedriver valuecom.mysql.cj.jdbc.Driver/property nameurl valuejdbc:mysql://localhost:3306/ssm?serverTimezoneUTC/property nameusername valueroot/property namepassword valueroot//dataSource/environment/environmentsmappersmapper resourceUserMapper.xml//mappers
/configuration
3、创建POJO实体类
package com.ambow.pojo;
// alt 鼠标左键 整列编辑
public class User {private Integer id;private String username;private String password;private String gender;private String addr;//省略get,set方法//省略toString方法
}
4、创建Mapper映射文件
?xml version1.0 encodingUTF-8 ?
!DOCTYPE mapperPUBLIC -//mybatis.org//DTD Mapper 3.0//ENhttp://mybatis.org/dtd/mybatis-3-mapper.dtd
mapper namespacetestselect idselectUser resultTypecom.ambow.pojo.Userselect * from tb_user/select
/mapper
注意映射文件直接放在resources根目录中。
? 映射文件完成对象和数据表之间的映射
5、测试类
package com.ambow;import com.ambow.pojo.User;
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 MyBatisDemo {public static void main(String[] args) throws IOException {String resource mybatis-config.xml;InputStream inputStream Resources.getResourceAsStream(resource);//获取SqlSessionFactory - 工厂对象SqlSessionFactory sqlSessionFactory new SqlSessionFactoryBuilder().build(inputStream);//获取SqlSession - 连接对象SqlSession sqlSession sqlSessionFactory.openSession();ListUser list sqlSession.selectList(test.selectUser);for (User user : list) {System.out.println(user);}}
}
四、使用Lombok简化POJO类的代码
1添加依赖
dependencygroupIdorg.projectlombok/groupIdartifactIdlombok/artifactIdversion1.18.24/versionscopeprovided/scope
/dependency
2在IDEA中安装lombok插件
3在IDEA中配置 勾选 “enable annotation processing”
File---Settings---Build,Execution,Deployment ---Compiler---Annotation Processors ---勾选 “enable annotation processing” 4修改POJO实体类代码
Data
NoArgsConstructor
AllArgsConstructor
public class User {private Integer id;private String username;private String password;private String gender;private String addr;
}
5、使用Junit单元测试
1引入依赖
dependencygroupIdjunit/groupIdartifactIdjunit/artifactIdversion4.12/versionscopetest/scope
/dependency
2在测试类中给方法添加Test注解即可 Testpublic void test01() throws IOException {String resource mybatis-config.xml;InputStream inputStream Resources.getResourceAsStream(resource);//获取SqlSessionFactory - 工厂对象SqlSessionFactory sqlSessionFactory new SqlSessionFactoryBuilder().build(inputStream);//获取SqlSession - 连接对象SqlSession sqlSession sqlSessionFactory.openSession();ListUser list sqlSession.selectList(test.selectUser);for (User user : list) {System.out.println(user);}}
在映射文件中的mapper元素中加入的映射信息增删改查的元素即SQL如果需要参数在sql中可以通过#{}来获取参数对象的属性。
注意事项
${}和#{}的主要区别 ${}类似于原始JDBC中的Statement采用的是拼接的方式生成sql语句直接将${xxx}对应的内容直接拼接到sql语句中 #{}类似于原始JDBC中的PrepareStatement采用占位符的方式生成sql语句会将#{xxx}对应的内容当做字符串的形式填入对应的占位符位置上。 当方法中传入的参数唯一时可以不为此参数设置名称 在通过“#{}”或“${}”形式取用此参数时大括号内无论写什么名称最终获取到的都是传入的唯一参数