mybatis单框架实现数据库新增、删除、修改
1 准备工作
1.1 导入依赖
| <dependencies> |
| <dependency> |
| <groupId>org.mybatis</groupId> |
| <artifactId>mybatis</artifactId> |
| <version>3.5.9</version> |
| </dependency> |
| |
| <dependency> |
| <groupId>mysql</groupId> |
| <artifactId>mysql-connector-java</artifactId> |
| <version>8.0.29</version> |
| </dependency> |
| |
| <dependency> |
| <groupId>org.projectlombok</groupId> |
| <artifactId>lombok</artifactId> |
| <version>1.18.24</version> |
| </dependency> |
| <dependency> |
| <groupId>junit</groupId> |
| <artifactId>junit</artifactId> |
| <version>4.13.2</version> |
| |
| <scope>test</scope> |
| </dependency> |
| |
| <dependency> |
| <groupId>log4j</groupId> |
| <artifactId>log4j</artifactId> |
| <version>1.2.17</version> |
| </dependency> |
| </dependencies> |
1.2 配置java文件夹和resource资源文件夹都能输出到target目录中
| <build> |
| |
| <resources> |
| <resource> |
| <directory>src/main/java</directory> |
| <includes> |
| |
| <include>**/**</include> |
| </includes> |
| </resource> |
| <resource> |
| <directory>src/main/resources</directory> |
| <includes> |
| |
| <include>**/**</include> |
| </includes> |
| </resource> |
| </resources> |
| </build> |
1.3 创建需要查询的实体类(全部引用数据类型)
| package entity; |
| |
| import lombok.AllArgsConstructor; |
| import lombok.Data; |
| import lombok.NoArgsConstructor; |
| |
| ;AllArgsConstructor |
| ;NoArgsConstructor |
| ;Data |
| |
| public class Emp {private Integer empno; |
| private String ename; |
| private String job; |
| private Integer mgr; |
| private String hiredate; |
| private Double sal; |
| private Double comm; |
| private Integer deptno; |
| } |
1.4 在resource资源文件夹下面创建jdbc.properties文件
| |
| jdbc.driver=com.mysql.cj.jdbc.Driver |
| jdbc.url=jdbc:mysql://127.0.0.1:3306/数据库名称 |
| jdbc.username=账户 |
| jdbc.password=密码 |
1.5 在resource资源文件夹下创建log4j.properties文件
| |
| log4j.rootLogger=DEBUG,Console,D |
| |
| log4j.appender.Console=org.apache.log4j.ConsoleAppender |
| log4j.appender.Console.layout=org.apache.log4j.PatternLayout |
| log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n |
| log4j.logger.org.apache=INFO |
| |
| log4j.logger.java.sql.ResultSet=INFO |
| log4j.logger.java.sql.Connection=DEBUG |
| log4j.logger.java.sql.Statement=DEBUG |
| log4j.logger.java.sql.PreparedStatement=DEBUG |
| |
| log4j.appender.D = org.apache.log4j.DailyRollingFileAppender |
| log4j.appender.D.File = logs/mybatis.log |
| log4j.appender.D.Append = true |
| log4j.appender.D.Threshold = DEBUG |
| log4j.appender.D.layout = org.apache.log4j.PatternLayout |
| log4j.appender.D.layout.ConversionPattern =%-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n |
1.6 在resource资源文件夹下面创建mybatis-config.xml文件
| <?xml version=;1.0; encoding=;UTF-8; ?> |
| <!DOCTYPE configuration |
| PUBLIC ;-//mybatis.org//DTD Config 3.0//EN; |
| ;http://mybatis.org/dtd/mybatis-3-config.dtd;> |
| <configuration> |
| |
| <properties resource=;jdbc.properties;></properties> |
| |
| <typeAliases> |
| <package name=;entity;/> |
| </typeAliases> |
| |
| <environments default=;mysql;> |
| |
| <environment id=;mysql;> |
| |
| |
| <transactionManager type=;JDBC;/> |
| |
| |
| |
| |
| <dataSource type=;POOLED;> |
| <property name=;driver; value=;${jdbc.driver};/> |
| <property name=;url; value=;${jdbc.url};/> |
| <property name=;username; value=;${jdbc.username};/> |
| <property name=;password; value=;${jdbc.password};/> |
| </dataSource> |
| </environment> |
| </environments> |
| |
| <mappers> |
| |
| |
| <package name=;mapper;/> |
| </mappers> |
| </configuration> |
注意: mybatis-config.xml文件中导入jdbc.properties文件的指令
| |
| <properties resource=;jdbc.properties;></properties> |
| |
1.7 创建SqlSessionFactoryFactory工具类
| package util; |
| |
| import org.apache.ibatis.io.Resources; |
| import org.apache.ibatis.session.SqlSessionFactory; |
| import org.apache.ibatis.session.SqlSessionFactoryBuilder; |
| |
| import java.io.InputStream; |
| |
| public class SqlSessionFactoryUtil { |
| private static String resource = ;mybatis-config.xml;; |
| |
| private static SqlSessionFactory sf=null; |
| static { |
| |
| |
| try {InputStream inputStream = Resources.getResourceAsStream(resource); |
| sf = new SqlSessionFactoryBuilder().build(inputStream); |
| } catch (Exception e) {e.printStackTrace(); |
| } |
| } |
| |
| public static SqlSessionFactory sf(){ return sf; |
| } |
| |
| } |
1.8 创建EmpMapper接口和EmpMapper.xml文件
1.9 主配置文件引入其他配置文件(扫描该配置文件的根目录)
| |
| <mappers> |
| <package name=;mapper;/> |
| </mappers> |
2 新增insert
2.1 在EmpMapper接口中的方法名
int add(Emp e);
2.2 在EmpMapper.xml中准备的sql语句
| |
| <insert id=;add; useGeneratedKeys=;true; keyProperty=;empno;> |
| insert into emp values(null,#{ename},#{job},#{mgr},#{hiredate},#{sal},#{comm},#{deptno}) |
| </insert> |
2.3 在test文件夹下写的测试代码
| ;org.junit.Test |
| public void t3(){ |
| SqlSessionFactory sf = SqlSessionFactoryUtil.sf(); |
| |
| SqlSession sqlSession = sf.openSession(); |
| |
| |
| EmpMapper em = sqlSession.getMapper(EmpMapper.class); |
| Emp emp=new Emp(null,;小王;,;经理;,1234,null,5000D,null,10); |
| |
| em.add(emp); |
| System.out.println(;添加后:;;emp); |
| sqlSession.commit(); |
| sqlSession.close(); |
| } |
2.4 新增结果
2.4.1 添加之前 emp表截图

2.4.2 运行截图

2.4.3 添加之后emp表截图

2.5 知识点总结
| 注意:新增时若某一字段设置了自动增长,那么插入的是null值的,得到的结果就算最新的自动增长的那个数字 |
| 设置了useGeneratedKeys=;true; keyProperty=;empno;就会自动回填到你填写的参数中 |
| 另外你传入的是实参是对象,那么可以通过 |
3 删除delete
3.1 在EmpMapper接口中的方法名
int delete(int id);
3.2 在EmpMapper.xml中准备的sql语句
| |
| <insert id=;delete;> |
| delete from emp WHERE empno=#{id} |
| </insert> |
3.3 在test文件夹下写的测试代码
| public void t4(){ |
| SqlSessionFactory sf = SqlSessionFactoryUtil.sf(); |
| |
| SqlSession sqlSession = sf.openSession(); |
| |
| |
| EmpMapper em = sqlSession.getMapper(EmpMapper.class); |
| |
| em.delete(8889); |
| sqlSession.commit(); |
| sqlSession.close(); |
| } |
3.4 删除结果
3.4.1 删除之前

3.4.2 运行截图

3.4.2 删除之后

3.5 知识点总结
| sqlSession.commit();这是设置了该事务提交,因为transactionManager type=;JDBC;是默认是手动提交的 |
| 不写这句话的话,数据库是不会产生任何变化的 |
4 修改update
4.1 在EmpMapper接口中的方法名
int update(Emp e);
4.2 在EmpMapper.xml中准备的sql语句
| |
| <update id=;update;> |
| update emp set ename=#{ename},job=#{job},mgr=#{mgr},hiredate=#{hiredate},sal=#{sal}, |
| comm=#{comm},deptno=#{deptno} |
| where empno=#{empno} |
| </update> |
4.3 在test文件夹下写的测试代码
| |
| ;org.junit.Test |
| public void t5(){ |
| SqlSessionFactory sf = SqlSessionFactoryUtil.sf(); |
| |
| SqlSession sqlSession = sf.openSession(); |
| |
| |
| EmpMapper em = sqlSession.getMapper(EmpMapper.class); |
| |
| Emp emp=new Emp(8890,;张三;,;哈哈哈;,1234,;2019-08-03;,8888d,6666d,20); |
| em.update(emp); |
| sqlSession.commit(); |
| sqlSession.close(); |
| } |
4.4 修改结果
4.4.1 修改之前

4.4.2 运行截图

4.4.2 修改之后

3.5 知识点总结
| 若你传入的参数是实体类的对象,对应的xml文件中的update标签中可以通过 |
| ${实体类属性名}也是可以获取的值,正如之前所提到的,这个因为安全性的问题,使用场景一般是模糊查找 |
<link href="https://csdnimg.cn/release/blogv2/dist/mdeditor/css/editerView/markdown_views-22a2fefd3b.css" rel="stylesheet"/><link href="https://csdnimg.cn/release/blogv2/dist/mdeditor/css/style-4f8fbf9108.css" rel="stylesheet"/>