mybatis基础
写在前面:
mybatis是个ORM框架,与传统的JDBC不一样,mybatis通过实体类映射来链接数据库里的数据,通过封装避免了自己处理resultset,此外mybatis中Dao接口不需要有实现类来实现,而是通过注册mapper.xml配置文件来实现访问数据库,sql语句写在配置文件中,方便管理,随后在配置文件中添加mapper标签形成关联即可。使用传统的JDBC的话每一个sql语句都得封装一层,过于繁琐。mybatis大大的简化了代码量。
1,在根目录的pom.xml中添加maven依赖
<dependencies> <!--mytabis依赖--> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.2</version> </dependency> <!--mysql依赖--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.22</version> </dependency>
</dependencies>
![](https://img2020.cnblogs.com/blog/2248223/202110/2248223-20211014135742136-1291327038.png)
2,创建模块
根目录->new->module articatid按照规范起名mybatis-01
添加完成后pom.xml配置文件中会多出modules标签
3,配置mybatis核心配置文件(链接数据库)
mybatis-01->src->main->resources->new file mybatis-config.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="${driver}"/> <!--填自己的链接数据库所需要的driver--> <property name="url" value="${url}"/> <!--填写url--> <property name="username" value="${username}"/> <!--填写username--> <property name="password" value="${password}"/> <!--填写password--> </dataSource> </environment> </environments> </configuration>
4,编写mybatis工具类
//用来获取sqlsession的工具类 public class MybatisUtils { private static SqlSessionFactory sqlSessionFactory; static { try { //获取sqlsessionFactory对象 String resource = "mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); } catch (IOException e) { e.printStackTrace(); } } public static SqlSession getSqlSession(){ return sqlSessionFactory.openSession(); } }
5,数据库建表,编写实体类,dao接口,mapper.xml
//实体类
public class user { private int id; private String name; private String pwd; public user() { } public user(int id, String name, String pwd) { this.id = id; this.name = name; this.pwd = pwd; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPwd() { return pwd; } public void setPwd(String pwd) { this.pwd = pwd; } @Override public String toString() { return "user{" + "id=" + id + ", name='" + name + '\'' + ", pwd='" + pwd + '\'' + '}'; } }
//dao接口 public interface userDao { public user selectOne(int id);
public List<user> getAll();
}
<!--userMapper.xml-->
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!--namespace用来绑定dao接口--> <mapper namespace="com.grigeorge.dao.userDao"> <select id="getAll" resultType="com.grigeorge.entity.user"> select * from mybatis.user </select> <select id="selectOne" resultType="com.grigeorge.entity.user"> select * from mybatis.user where id = #{id} </select> </mapper>
写完后须在mybatis-config.xml中添加mapper标签形成映射关联
<mappers> <mapper resource="com/grigeorge/dao/userMapper.xml"/> <!--userMapper.xml的相对路径--> </mappers>
6,测试
public class userDaoTest { public static void main(String[] args) { SqlSession sqlSession = MybatisUtils.getSqlSession(); userDao userDao =sqlSession.getMapper(userDao.class); List<user> userList= userDao.getAll(); for (user user : userList) { System.out.println(user); } // user user = userDao.selectOne(4); // System.out.println(user);
//提交事务
sqlSession.commit();
//关闭会话
sqlSession.close();
} }
总结:
mybatis使用时可分为以下的关键步骤:
0,数据库建表,写入数据。
1,封装sqlSession的工具类 。即 MybatisUtils
2,写与数据库对应的实体类。
3,编写核心配置文件。即 mybatis-config.xml
4,编写mapper接口和mapper配置文件
5,将mapper配置文件加入到核心配置文件中形成映射 。
6,写测试类进行测试。
补充遇到的一些问题:
tips:要将代码这中的注释删除 ,否则会报错。
路径问题:可能会遇到找不到userDao.xml和找不到实体类的情况,需要检查配置时的包路径是否正确。
###报错 :Cause: java.io.IOException: Could not find resource com/grigeorge/dao/userMapper.xml
解决方案:在根目录下的pom.xml中加入以下代码
<build> <resources> <resource> <directory>src/main/java</directory> <includes> <include>**/*.xml</include> </includes> </resource> </resources> </build>
###报错:
解决方案:修改mybatis-config.xml中的url配置,
<property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>
改为:
<property name="url" value="jdbc:mysql://localhost:3306/mybatis?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC"/>
问题解决后得到测试数据