Github:https://github.com/mybatis/mybatis-3/releases
中文文档::https://mybatis.org/mybatis-3/zh/index.html
储备知识:mysql 数据库知识:建库、建表、增删改查、事务、范式等。
https://blog.csdn.net/qq_33369905/article/details/105828923?spm=1001.2014.3001.5502
(1)记得要检查一下settings是不是自己的仓库,有时候会默认m2.
(2)导入依赖,配置环境和资源文件
(3)maven由于他的约定大于配置,我们之后可以能遇到我们写的配置文件,无法被导出或者生效的问题,解决方案:按照下面代码那样加<resource>引用
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.27</version> </dependency> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"> <property name="" value=""/> </transactionManager> <dataSource type="POOLED"> <!-- POOLED-连接池 <properties> 读取外部文件的配置信息--> <property name="driver" value="com.mysql.cj.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/test?useSLL=true&useUnicode=true&characterEncoding-UTF-8&serverTimezone=GMT%2B8"/> <!--填写你的数据库用户名--> <property name="username" value="root"/> <!--填写你的数据库密码--> <property name="password" value="qwer1234"/> </dataSource> </environment> </environments> <!-- 项目管理 maven只会打包resource里面的文件,如果文件不放在resource里面,需要通过配置通知maven --> <build> <resources> <resource> <directory>src/main/resources</directory> <includes> <include>**/*.properties</include> <include>**/*.xml</include> </includes> <filtering>true</filtering> </resource> <resource> <directory>src/main/java</directory> <includes> <include>**/*.properties</include> <include>**/*.xml</include> </includes> <filtering>true</filtering> </resource> </resources> </build>
这样子的话,子项目就可以不用修改pom.xml直接使用到父项目的pom.xml配置了。
maven学习资源:Maven零基础入门教程(一套轻松搞定maven工具)_哔哩哔哩_bilibili
(1)src/main/java和src/test/java
这两个目录中的所有*.java文件会分别在comile和test-comiple阶段被编译,编译结果分别放到了target/classes和targe/test-classes目录中,但是这两个目录中的其他文件都会被忽略掉。
(2)src/main/resouces和src/test/resources
这两个目录中的文件也会分别被复制到target/classes和target/test-classes目录中。
(3)target/classes
打包插件默认会把这个目录中的所有内容打入到jar包或者war包中
我们的方法类和实体类放在java文件里,而mybatis的核心文件mybatis-config.xml放在resources文件,test测试文件应与Java文件一致 ,例如:·
a.配置环境文件,设置连接池
b.引用映射文件,即mapper.xml,在代码的最下面<mappper>里设置,这个点容易忘记导致报错!!!!
<?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> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"> <property name="" value=""/> </transactionManager> <dataSource type="POOLED"> <!-- POOLED-连接池 <properties> 读取外部文件的配置信息--> <property name="driver" value="com.mysql.cj.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/test?useSLL=true&useUnicode=true&characterEncoding-UTF-8&serverTimezone=GMT%2B8"/> <!--填写你的数据库用户名--> <property name="username" value="root"/> <!--填写你的数据库密码--> <property name="password" value="qwer1234"/> </dataSource> </environment> </environments> <mappers> <!-- 添加StudentMapper.xml映射文件路径的配置,用于将StudentMapper.xml映射文件加载到程序中 --> <!-- <mapper resource="com/mapper/StudentMapper.xml"/>--> <package name="com.lcr.dao"/> </mappers> </configuration>
public interface StudentMapper { //查询所有学生 List<Student> selectAll(); //查询某一学生 Student getStudentById(int id); //插入一个学生 int insertStudent(Student std); //修改学生 int updateStudent(Student std); //删除学生 int deleteStudent(int id); }
a.名空间为接口类的全路径
b.sql语句的 id = 接口类的方法名
c. parameterType是传入参数,resultType是返回参数,参数数据类型多样,但增删改返回的resultType固定为int类型
d.对于模糊查询,最好在sql使用通配符
<mapper namespace="com.lcr.dao.StudentMapper"> <select id="selectAll" parameterType="int" resultType="com.lcr.entity.Student"> select * from test.student </select> <select id="getStudentById" parameterType="int" resultType="com.lcr.entity.Student"> select * from student where student_id = #{id} </select> <insert id="insertStudent" parameterType="com.lcr.entity.Student" > insert into test.student(name,sex) values(#{name},#{sex}) </insert> <insert id="insertStudent2" parameterType="map" > insert into test.student(name,sex) values(#{name},#{sex}) </insert> <update id="updateStudent" parameterType="com.lcr.entity.Student"> update test.student set name=#{name},phone=#{phone} where student_id=#{studentId}; </update> <delete id="deleteStudent" parameterType="int"> delete from test.student where student_id = #{id} </delete> </mapper>
(1)在此之前,先在utils包下建一个数据库的工具类
public class MybatisUtils { private static SqlSessionFactory sqlSessionFactory; static { try { //读取配置文件 Reader reader = Resources.getResourceAsReader("mybatis-config.xml"); sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader); } catch (IOException e) { e.printStackTrace(); } } public static SqlSession getSqlSession(){ return sqlSessionFactory.openSession(); } }
(2)以下是测试类的一个增删改查例子,关键点如下:
a.开启一个事务需要用到utils的创建方法,按照官方文档的创建形式来的
b. StudentMapper studentMapper = sqlSession.getMapper(StudentMapper.class); getMapper是一个常用的调用接口类的方法,直接获取到 StudentMapper接口类的方法
c. 事务启动后一定要提交事务! 一定要关闭! sqlSession.commit(); sqlSession.close();
public class StudentMapperTest { //增删改查 @Test public void getStudentById() { //开启一个事务,开启事务实现类在工具类utils SqlSession sqlSession = MybatisUtils.getSqlSession(); //查询某一学生 StudentMapper studentMapper = sqlSession.getMapper(StudentMapper.class); Student student = studentMapper.getStudentById(2); sqlSession.close(); } @Test public void insertStudent2(){ //使用map作为自定义参数组,避免使用POJO的时候参数太多 SqlSession sqlSession = MybatisUtils.getSqlSession(); StudentMapper studentMapper = sqlSession.getMapper(StudentMapper.class); Map<String,Object> map = new HashMap<String,Object>(); map.put("newName","cwg"); map.put("newSex",true); studentMapper.insertStudent2(map); sqlSession.commit(); sqlSession.close(); } } }
以上就是基础mybatis的使用,其中涉及到maven项目创建,mysql数据库原理SpringMVC简单使用、最重要的是配置文件操作的难点和重点,下一篇将重点学习mybatis的配置属性。
// 待解决问题: void rollback() 回滚事务是啥? 数据库的时间戳属性不能正常读出为什么?