淘客网站推广免备案,深圳app开发,软件开发外包有前途吗,开发公司经理述职报告为什么要学习mybatis
首先要弄清楚什么是mybatis#xff1f;我们为什么要学mybatis 学习MyBatis可以帮助开发人员更高效地进行数据库操作#xff0c;提高开发效率#xff0c;并且可以使得应用程序更具可维护性和性能优势。 我们知道Java程序操作数据库是通过jdbc与数据库进…
为什么要学习mybatis
首先要弄清楚什么是mybatis我们为什么要学mybatis 学习MyBatis可以帮助开发人员更高效地进行数据库操作提高开发效率并且可以使得应用程序更具可维护性和性能优势。 我们知道Java程序操作数据库是通过jdbc与数据库进行交互那么说明mybatis有传统jdbc所没有的优势。
传统jdbc方式
// 1. 加载配置文件
Properties pronew Properties();
pro.load(new FileReader(resource/jdbc.properties));
// 2. 获取配置文件中连接数据库的信息
String urlpro.getProperty(url);
String userpro.getProperty(user);
String passwordpro.getProperty(password);
String driverpro.getProperty(driver);
// 3. 加载数据库的驱动
Class.forName(driver);
// 4. 创建数据库的连接
Connection conn DriverManager.getConnection(url, user, password);// 5. sql 语句
String sql select * from s_admin where username? and password?;
// 3. 创建执行sql的对象
ps conn.prepareStatement(sql);
// 4. 给 赋值
ps.setString(1, username);
ps.setString(2, password);
// 5. 执行sql
ResultSet rs ps.executeQuery();
// 6. 如果查询出数据则返回该条数据
if (rs.next()) {Admin admin new Admin();admin.setUsername(rs.getString(username));admin.setPassword(rs.getString(password));return admin;
// 7. 否则返回空
} else {return null;
}我们可以看出来通过传统jdbc方式连接数据库比较繁琐需要加载配置文件、获取配置文件信息、加载数据库驱动、创建数据库连接等一系列操作还可能导致SQL查询代码混合在JAVA代码中导致代码冗长开发的效率降低同时也带来了维护上的一些问题。在实际的项目中SQL语句的变化可能很大一旦发生变化就要修改JAVA代码系统需要重新编译不方便维护。如果映射为Java对象会比较方便。 这也是我们为什么要学习Mybatis的原因 Mybatis简介
Mybatis的开发文档地址https://mybatis.net.cn/首先我们要知道什么是MybatisMybatis原是Apache的一个开源项目ibatis2010年迁移到Google code改名为Mybatis2013年迁移到GitHub上。MyBatis 是一款优秀的持久层框架支持定制化 SQL、存储过程以及高级映射。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。
Mybatis解决的问题
解决数据库驱动的问题创建JDBC中必须使用的Connection,Statement,Result对象从xml中获取SQL并执行SQL语句把ResultSet结果转化为Java对象关闭资源
如何使用Mybatis
下载Mybatishttps://github.com/mybatis/mybatis-3/releases准备阶段
数据库环境搭建
我这里使用的是Navicat管理工具下载地址https://www.navicat.com.cn/download/direct-download创建数据库和表
CREATE TABLE user (id int unsigned NOT NULL AUTO_INCREMENT COMMENT id,name varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT 姓名,sex varchar(1) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT 性别,age int DEFAULT NULL COMMENT 年龄,PRIMARY KEY (id) USING BTREE
) ENGINEInnoDB AUTO_INCREMENT18 DEFAULT CHARSETutf8mb4 COLLATEutf8mb4_general_ci ROW_FORMATDYNAMIC;创建Java项目注意这里的GroupID填写你的域名作为组的唯一标识。等待Maven依赖文件下载完成。在设置中可以看到Maven的版本我这里是3.9.5可以在这个网站上搜索Maven所支持mybatis的版本https://mvnrepository.com/
添加所需依赖
复制依赖文件到pom.xml文件中
dependencies!-- junit 测试 --dependencygroupIdjunit/groupIdartifactIdjunit/artifactIdversion4.13.2/versionscopetest/scope/dependency!-- mysql驱动 --dependencygroupIdmysql/groupIdartifactIdmysql-connector-java/artifactIdversion8.0.33/version/dependency!-- mybatis --dependencygroupIdorg.mybatis/groupIdartifactIdmybatis/artifactIdversion3.5.9/version/dependency
/dependencies
如果出现了像我这样的报错重构Maven换到安全版本即可。
配置核心文件
创建mybatis-config.xml文件存放位置在src/main/resources目录下核心文件内容在Mybatis的开发文档如下
?xml version1.0 encodingUTF-8 ?
!DOCTYPE configuration
PUBLIC -//mybatis.org//DTD Config 3.0//EN
http://mybatis.org/dtd/mybatis-3-config.dtd
configurationenvironments defaultdevelopmentenvironment iddevelopmenttransactionManager typeJDBC/dataSource typePOOLEDproperty namedriver value${driver}/property nameurl value${url}/property nameusername value${username}/property namepassword value${password}//dataSource/environment/environmentsmappersmapper resourceorg/mybatis/example/BlogMapper.xml//mappers
/configuration复制内容到mybatis-config.xml中我们需要修改的是红色圈里面的内容下面我简单解释一下 ?xml version1.0 encodingUTF-8 ?指定了XML的版本和编码 ](http://mybatis.org/dtd/mybatis-3-config.dtd)指定了XML的结构引用了 MyBatis 的配置文件的 DTD 文件 指定了事务管理器的类型为 JDBC表示使用 JDBC 进行事务管理。指定了数据源的类型为 POOLED表示使用连接池来管理数据库连接。设置数据库驱动的名称${driver} 是一个占位符通常在实际应用中会被具体的数据库驱动名称替换。设置数据库的 URL 地址${url} 是一个占位符通常在实际应用中会被具体的数据库 URL 地址替换。设置连接数据库的用户名${username} 是一个占位符通常在实际应用中会被具体的用户名替换。设置连接数据库的密码${password} 是一个占位符通常在实际应用中会被具体的密码替换。指定了映射器的资源这里是一个 XML 文件的路径表示 MyBatis 将加载该路径下的 BlogMapper.xml 文件作为映射器。
在这里我先不填写映射文件的位置
创建实体User类
创建一个User类完成创建注意我们的字段名要和我们的属性名要保持一致。添加对应的有参构造函数、无参构造函数、获取器、设置器、toSring()
创建Mapper接口
首先什么是Mapper接口 在 MyBatis 中Mapper 接口是用于定义数据库操作的接口。Mapper 接口中的方法定义了对数据库的增删改查操作而具体的 SQL 语句则是通过注解或者 XML 文件来进行配置和映射。 通常情况下一个 Mapper 接口对应一个数据模型如一个数据库表它包含了针对该数据模型的各种操作方法。这些方法的名称和参数类型通常与具体的 SQL 语句相对应使得调用者能够直观地理解该方法所执行的操作。 MyBatis 提供了多种方式来配置 Mapper 接口和 SQL 语句的映射关系包括注解方式和 XML 文件方式。通过这些配置MyBatis 能够将接口方法与对应的 SQL 语句关联起来从而实现数据库操作的执行。 MyBatis相当于原来的DAO区别是Mapper仅仅是接口不需要提供实现类 在Java文件夹下创建cn.niutr.mybatis.mapper.UserMapper接口我们为什么要创建这个接口Mybatis中有面向接口编程的功能当我们调用接口中的方法时会自动匹配一个SQL语句并执行。
创建Mybatis的映射文件
我们知道Mybatis是一个ORMObject Relational Mapping对象 - 关系映射框架。
ObjectJava实体类对象Relational关系型数据库Mapping二者之间的对应关系
Java概念数据库概念类表属性字段/列对象记录/行 1、映射文件的命名规则 表所对应的实体类的类名Mapper.xml 例如表user映射的实体类为User所对应的映射文件为UserMapper.xml 因此一个映射文件对应一个实体类对应一张表的操作 MyBatis映射文件用于编写SQL访问以及操作表中的数据 MyBatis映射文件存放的位置是src/main/resources/mappers目录下 我们在resources文件夹下创建一个mappers文件夹用来存储我们的映射文件同时创建一个映射文件
?xml version1.0 encodingUTF-8 ?
!DOCTYPE mapperPUBLIC -//mybatis.org//DTD Mapper 3.0//ENhttp://mybatis.org/dtd/mybatis-3-mapper.dtd
mapper namespaceorg.mybatis.example.BlogMapperselect idselectBlog resultTypeBlogselect * from Blog where id #{id}/select
/mapper映射文件在官方文档中也可以找到复制映射文件到UserMapper.xml下同时我们还要修改上面的内容这里我简单解释一下
定义了一个 Mapper映射器元素指定了命名空间为 “org.mybatis.example.BlogMapper”这个命名空间通常与 Java 中的 Mapper 接口对应。
我们需要改的地方假如我们要执行一个插入操作我们需要再UserMapper接口中添加对应的方法同时我们还需要在XML中创建映射关系 2、MyBatis中可以面向接口操作数据要保证两个一致 ① mapper接口的全类名和映射文件的命名空间namespace保持一致 ② mapper接口中方法的方法名和映射文件中编写SQL的标签的id属性保持一致 表–实体类–mapper接口–映射文件注意还要修改映射器资源位置经过一些列操作之后我们的Mybatis就已经配置完成了
通过Junit测试功能
首先我们要在test文件夹下的java目录创建一个MybatisTest类用于测试接下来我们要创建一个测试方法
//读取MyBatis的核心配置文件
InputStream is Resources.getResourceAsStream(mybatis-config.xml);
//创建SqlSessionFactoryBuilder对象
SqlSessionFactoryBuilder sqlSessionFactoryBuilder new
SqlSessionFactoryBuilder();
//通过核心配置文件所对应的字节输入流创建工厂类SqlSessionFactory生产SqlSession对象
SqlSessionFactory sqlSessionFactory sqlSessionFactoryBuilder.build(is);
//创建SqlSession对象此时通过SqlSession对象所操作的sql都必须手动提交或回滚事务
//SqlSession sqlSession sqlSessionFactory.openSession();
//创建SqlSession对象此时通过SqlSession对象所操作的sql都会自动提交
SqlSession sqlSession sqlSessionFactory.openSession(true);
//通过代理模式创建UserMapper接口的代理实现类对象
UserMapper userMapper sqlSession.getMapper(UserMapper.class);
//调用UserMapper接口中的方法就可以根据UserMapper的全类名匹配元素文件通过调用的方法名匹配
映射文件中的SQL标签并执行标签中的SQL语句
int result userMapper.insertUser();
sqlSession.commit();
System.out.println(结果result);创建结果如下插入成功
加入log4j日志功能 添加所需依赖
添加依赖到pom.xml中开发文档
!--log4j--
dependencygroupIdorg.apache.logging.log4j/groupIdartifactIdlog4j-api/artifactIdversion2.23.0/version
/dependency
dependencygroupIdorg.apache.logging.log4j/groupIdartifactIdlog4j-core/artifactIdversion2.23.0/version
/dependency加入所需配置文件
log4j2的配置文件名为log4j2.properties存放的位置是src/main/resources目录下
# log4j2.properties# Set to debug or trace if log4j initialization is failing
status warn# Name of the configuration
name ConsoleLogConfigDemo# Console appender configuration
appender.console.type Console
appender.console.name consoleLogger
appender.console.layout.type PatternLayout
appender.console.layout.pattern %d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n# Root logger level
rootLogger.level debug# Root logger referring to console appender
rootLogger.appenderRef.stdout.ref consoleLogger结果如下
MyBatis的增删改查 添加
!--int insertUser();--
insert idinsertUser
insert into t_user values(null,admin,男,23)
/insert删除
!--int deleteUser();--
delete iddeleteUser
delete from user where id 18
/delete修改
!--int updateUser();--
update idupdateUser
update user set nameyxc where id 18
/update查询一个实体类对象
!--User getUserById();--
select idgetUserById resultTypecn.niutr.mybatis.pojo.User
select * from user where id 22
/select查询所有用户信息
select idgetAllUser resultTypecn.niutr.mybatis.pojo.Userselect * from user
/select如下测试文件
Test
public void testCRUD() throws IOException {InputStream is Resources.getResourceAsStream(mybatis-config.xml);SqlSessionFactory sqlSessionFactory new SqlSessionFactoryBuilder().build(is);SqlSession sqlSession sqlSessionFactory.openSession(true);UserMapper mapper sqlSession.getMapper(UserMapper.class);//int result mapper.UpdateUser();//int result mapper.deleteUser();// User user mapper.getUserById();// System.out.println(user);ListUser allUser mapper.getAllUser();for (User user : allUser) {System.out.println(user);}
}