MyBatis---------环境搭建(一)
目录
MySQL存储引擎InnoDB与Myisam
默认字符集
MyBatis使用
1.导入依赖
2.编写MyBatis核心配置文件
3.创建MyBatis工具类
4.Maven资源配置
测试
容易产生的问题:
1.配置文件没有注册
2.maven资源问题
3.绑定接接口错误
4.方法名不对
5.返回类型不对
生命周期和作用域
Mybatis三个核心接口
关于@Param() 注解
MySQL存储引擎InnoDB与Myisam
ENGINE=INNODB
ENGINE=MYISAM
默认字符集
DEFAULT CHARSET=utf8
MyBatis使用
1.导入依赖
junit junit 4.11 test org.mybatis mybatis 3.5.7 <!-- 注意核新配置文件链接 为8.0.21 mysql 依赖版本为 mysql mysql-connector-java 8.0.21 --> mysql mysql-connector-java 5.1.47
2.编写MyBatis核心配置文件
db.properties
driver=com.mysql.jdbc.Driverurl=jdbc:mysql://localhost:3306/mybatis?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTCusername=rootpassword=123456
<!-- --><!-- -->
3.创建MyBatis工具类
public class MybatisUtils { private static SqlSessionFactory sqlSessionFactory; static { try { //使用mybatis创建sqlSessionFactory对象 String resource = "mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); } catch (IOException e) { e.printStackTrace(); } } //既然有了 SqlSessionFactory,顾名思义,我们可以从中获得 SqlSession 的实例。 // SqlSession 提供了在数据库执行 SQL 命令所需的所有方法 public static SqlSession getSqlSession(){ return sqlSessionFactory.openSession(); // return sqlSessionFactory.openSession(true); 自动提交事务 }}
4.Maven资源配置
src/main/resources **/*.properties **/*.xml **/*.png true src/main/java **/*.properties **/*.xml true
测试
@Test public void test(){ SqlSession sqlSession = MybatisUtils.getSqlSession(); UserMapper mapper = sqlSession.getMapper(UserMapper.class); List userList = mapper.getUserList(); for (User user : userList) { System.out.println(user); } sqlSession.close(); }
容易产生的问题:
1.配置文件没有注册
org.apache.ibatis.binding.BindingException: Type interface com.gh.dao.UserMapper is not known to the MapperRegistry.
解决方法:
此时是/ 不是 .
2.maven资源问题
Could not find resource com/gh/dao/UserMapper.xml
解决方法
src/main/resources **/*.properties **/*.xml **/*.png true src/main/java **/*.properties **/*.xml true
3.绑定接接口错误
4.方法名不对
5.返回类型不对
生命周期和作用域
生命周期,和作用域,是至关重要的,因为错误的使用会导致非常严重的并发问题。
Mybatis三个核心接口
SqlSessionFactoryBuilder:
一旦创建了 SqlSessionFactory,就不再需要它了
局部变量
SqlSessionFactory:
说白了就是可以想象为 :数据库连接池
SqlSessionFactory 一旦被创建就应该在应用的运行期间一直存在,没有任何理由丢弃它或重新创建另一个实例。
因此 SqlSessionFactory 的最佳作用域是应用作用域。 application
最简单的就是使用单例模式或者静态单例模式。
SqlSession
连接到连接池的一个请求!
SqlSession 的实例不是线程安全的,因此是不能被共享的,所以它的最佳的作用域是请求或方法作用域。
用完之后需要赶紧关闭,否则资源被占用!
关于@Param() 注解
-
基本类型的参数或者String类型,需要加上
-
引用类型不需要加
-
如果只有一个基本类型的话,可以忽略,但是建议大家都加上!
-
我们在SQL中引用的就是我们这里的 @Param() 中设定的属性名!