(四)mybatis 入门案例
在test的java文件夹下面创建一个test类
创建一个main函数实现mybatis的查询,代码如下
package com.js.test;
import com.js.dao.UserDao;
import com.js.domain.User;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import java.util.ResourceBundle;
public class Mybatistest {
public static void main(String[] args) throws IOException {
// 1, 读取配置文件
InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml");
// 2, 创建SqlSessionFactory
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
SqlSessionFactory factory = builder.build(in);
// 3, 使用工厂生产SqlSession对象
SqlSession session = factory.openSession();
// 4, 使用SqlSession创建Dao接口的代理对象
UserDao userDao = session.getMapper(UserDao.class);
// 5, 使用代理对象执行方法
List<User> users = userDao.findAll();
for (User user: users) {
System.out.println(user);
}
// 6, 释放资源
session.close();
in.close();
}
}
右键执行Main方法
执行main方法时出现下面的错误
原因是项目运行的时候,jdk版本与本地的版本不一致。
IDEA—>File—>project structure,检查了一下project和moduels中jdk版本与本地对比,发现不一致
修改完毕之后到Settings–>Bulid, Execution,Deployment–>java Compiler,Target bytecode version设为本地Java版本(可以在Default Settings中把Project bytecode version 一劳永逸地配置成本地Java版本)
再一次运行main方法
还是报错
那么需要在自己的pom.xml文件指定编译的jdk版本,
<properties>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
</properties>
还是编译失败,最后来个绝招
终于编译成功了,虽然还是有错误
主要错误信息:
Error querying database. Cause: java.sql.SQLException: The server time zone value '�й���ʱ��' is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the 'serverTimezone' configuration property) to use a more specific time zone value if you want to utilize time zone support.
解决方案:
修改SqlMapConfig.xml文件关于url连接设定内容
url后加入?serverTimezone=UTC即可解决
再一次执行main方法,擦了,还有警告信息
此时就想引吭高歌一曲:
刚翻过了几座山, 又越过了几条河。 崎岖坎坷怎么它就这么多!
可以科普一下exit code,在大部分编程语言中都适用:
exit code 0 表示程序执行成功,正常退出
exit code 1 表示程序执行执行过程中遇到了某些问题或者错误,非正常退出
主要错误信息:
Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary.
提示信息表明数据库驱动com.mysql.jdbc.Driver’已经被弃用了、应当使用新的驱动com.mysql.cj.jdbc.Driver’
SqlMapConfig.xml 用最新的数据库驱动
//原驱动文件
<property name="driver" value="com.mysql.jdbc.Driver"/>
//更改为
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
再一次执行main方法,终于没红,但是我测试类要打印的记录控制台怎么没出来,只打出了类名
我好男啊
DEBUG了一下,数据确实都检索出来了,检索没问题。
总结
第一步:读取配置文件
第二部:创建SqlSessionFactory工厂
第三步:创建SqlSession
第四步:创建Dao接口的代理对象
第五步:执行dao中的方法
第六步:释放资源