正式开始配置并使用mybatis,以下是一系列的知识点
1.配置mybatis
1)用maven依赖下载mybatis的jar包
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.5</version>
</dependency>
2)编写xml配置文件
在resource文件夹中添加名字为mybatisconf.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>
<environments default="test">
<environment id="test">
<!--事务-->
<transactionManager type="JDBC"></transactionManager>
<!--数据源 连接池 dbcp c3p0 connection-->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/hello"/>
<property name="username" value="root"/>
<property name="password" value="123"/>
</dataSource>
</environment>
<environment id="developer">
<transactionManager type=""></transactionManager>
<dataSource type=""></dataSource>
</environment>
</environments>
<!--映射文件 增删改查-->
<mappers>
<mapper resource="dao/StudentMapper.xml"/>
</mappers>
</configuration>
dataSource是以连接池的方式配置连接的 <mappers>标签是连接增删改查的映射文件
3) 编写StudentMapper.xml文件
在java文件夹中新建dao路径,在dao中写该文件
<mapper namespace="aaa">
<!--查询 -->
<select id="findStudentById" parameterType="int" resultType="pojo.Student">
SELECT * FROM students WHERE id=#{id}
</select>
</mapper>
<mapper>中的namespace确定了引用路径,<select>标签中的id唯一确定了一条select语句,便于在测试中引用,paramterType是入参的类型,在此demo中为int型,值得注意的是,当入参是list类型的时候,paramterType的值为list中实体类的类型,resultType是返回结果的类型,同样当返回值为list类型时,resultType的值为list中实体类的类型。 #{id} 相当于jdbc中的?,当运行时候会被入参所代替。
4) 新建Student实体类(javabean)
public class Student { private int age; private String name; private String address; private int id; private family family;
}
5)测试
junit单元测试
在maven添加依赖
测试代码<!-- https://mvnrepository.com/artifact/junit/junit --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency>
@Test是junit单元测试的注解,用于需要测试的方法。当需要运行的时候选中方法名称testFindStudentById run运行。inputstream是用来关联mybatisconf.xml文件的。sqlSessionFactory是通过sqlSessionFactoryBuilder的build方法获得的,它通过config配置文件获得一个sqlsessionFactory的实例。sqlsessionFactory由于在应用期间都存在,所以应该用单例模式加以创建import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import org.junit.Test; import org.apache.ibatis.io.Resources; import pojo.Student; import java.io.IOException; import java.io.InputStream; public class StudentTest { @Test public void testFindStudentById(){ //快捷提示快捷键 alt+enter try { InputStream inputstream = Resources.getResourceAsStream("mybatisconf.xml"); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputstream); SqlSession sqlSession = sqlSessionFactory.openSession(); Student student = sqlSession.selectOne("aaa.findStudentById", 2); //sout fori System.out.println(student); } catch (IOException e) { e.printStackTrace(); } } }
sqlsession底层封装的是jdbc连接,可以执行已映射的sql语句。sqlSession实例不能被共享,所以每一个线程应该独立使用一个sqlSession。
6)错误修改
1.忘记导入mysql的jar包
2.找不到StudentMapper.xml文件,原因:maven工程默认只在resource文件家下去加载xml文件,其他的地方都不识别,我们可以通过配置pom.xml通知maven加载该文件。<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.38</version> </dependency>
在pom.xml中添加如下代码:
<resources> <resource> <!--匹配main/java下的任意文件夹下的后缀为xml的文件--> <directory>src/main/java</directory> <includes> <include>**/*.xml</include> </includes> <filtering>true</filtering> </resource> <resource>
3.3字节的 UTF-8 序列的字节 3 无效。问题原因:![]()
StudentMapper.xml中所有的注释代码均不能出现中文。