应要求,本次内容需要用到mybatis框架,抱着一法通,则万法通的心态,就先过去看了下官方文档,然后使用了一下,总结如下用法:
1、首先,要下载mybatis的jar包,这个官网上直接有,我就不贴地址了。
2、我使用的是mysql数据库,所以,还需要mysql的驱动包
3、两个包搞定后,需要一个mybatis的配置文件,这个配置文件极其重要:
<?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"/>
<!-- 配置数据库连接信息 -->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/数据库名"/>
<property name="username" value="xxxx"/>
<property name="password" value="xxxx"/>
</dataSource>
</environment>
</environments>
</configuration>
这个文件名字一般是conf.xml,嗯,习惯重于编程,那么我们就按照习惯来,不改名字了。对了, 位置放在src下面
这个文件里面的东西,其实一看也就明白了,是帮我们连接数据库用的,就不多做解释了。
4、数据库建好表,不多累赘
5、建立与数据库表对应的实体类,注意,请一一对照
6、这个时候,重点来了,如何使用呢?官网给了我们两个方法:一个是xml配置文件,一个是注解,我们简单的使用,用注解的方式不知道要好到哪里去咯,于是我们使用注解的方法。
public interface ResuserMapper {
//使用@Select注解指明getAll方法要执行的SQL
@Select("select * from resuser")
public Resuser getAll();
}
其中,Resuser是我的实体类,数据库名字叫做resuser
7、到conf.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="development">
<environment id="development">
<transactionManager type="JDBC"/>
<!-- 配置数据库连接信息 -->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/数据库名"/>
<property name="username" value="root"/>
<property name="password" value="xxxx"/>
</dataSource>
</environment>
</environments>
<mappers>
<!-- 注册UserMapper映射接口-->
<mapper class="com.yc.mapping.ResuserMapper"/>
</mappers>
</configuration>
8、到此,准备工作就做完了,那么现在,可以去写测试类了
public static void main(String[] args) {
//mybatis的资源配置文件
String resource = "conf.xml";
//得到IO流
InputStream is = Test.class.getClassLoader().getResourceAsStream(resource);
//每个基于 MyBatis 的应用都是以一个 SqlSessionFactory 的实例为核心的
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
//得到session
SqlSession sqlSession=factory.openSession(true); //true 自动提交
//得到ResuserMapper接口的实现类对象,ResuserMapper接口的实现类对象由sqlSession.getMapper(ResuserMapper.class)动态构建出来
ResuserMapper mapper = sqlSession.getMapper(ResuserMapper.class);
//执行查询操作,将查询结果自动封装成List<User>返回
List<Resuser> lstUsers = mapper.getAll();
//使用SqlSession执行完SQL之后需要关闭SqlSession
sqlSession.close();
System.out.println(lstUsers);
}
9、emmmmm,这个时候,可能会有一堆的错误,当然,欧洲程序猿请自觉走开,到这里就差不多了。
第一个错误:Unsupported major.minor version 52.0
原因是因为mybatis3.5最低支持jdk1.8,因此如果你是jdk1.7的,请换成jdk1.8以上
第二个错误:Mybatis错误:Parameter 'XXX' not found. Available parameters are [1, 0, param1, param2]
这个是因为你有参数注入,那么,这个时候,为了确定顺序,需要你带上@param注解
@Select("select * from resuser where username=#{username} and pwd=#{pwd}")
public Resuser login(@Param("username")String username,@Param("pwd")String pwd);
第三个错误:java.lang.AbstractMethodError: Method com/mysql/jdbc/PreparedStatement.isClosed()Z is abstract
原因是因为你的mysql驱动包版本过低,请更新一下子~~
补充:第四个错误,连mysql8会出问题,因为和jdbc一样,mysql8针对连接有所更改,配置改为如下:
<!-- 配置数据库连接信息 -->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://127.0.0.1:3306/xxx?serverTimezone=UTC&useSSL=false"/>
<property name="username" value="root"/>
<property name="password" value="xxxx"/>
</dataSource>
好啦,暂时到现在为止,就出现这些错误,等发现了,再说
see you