- Mybatis 是什么?有什么用?
- 如何使用
Mybatis 是什么?有什么用?
- mybatis是一个优秀的基于java的持久层框架,它内部封装了jdbc,使开发者只需要关注sql语句本身,而不需要花费精力去处理加载驱动、创建连接、创建statement等繁杂的过程
- mybatis通过xml或注解的方式将要执行的各种 statement配置起来,并通过java对象和statement中sql的动态参数进行映射生成最终执行的sql语句
最后mybatis框架执行sql并将结果映射为java对象并返回。采用ORM思想解决了实体和数据库映射的问题,对jdbc进行了封装,屏蔽了jdbcapi底层访问细节,使我们不用与jdbcapi打交道,就可以完成对数据库的持久化操作。
个人小结
- 最主要是实现3个作用
- 提供池化的链接
- sql语句和代码解耦
- 实现实体(属性)和表(字段)的自动映射
- 可以这么理解通过JAVA对象,隐射sql语句中的输入参数,返回结果….
- 最主要是实现3个作用
如何使用
- 至少:两个(类)配置文件
- MyBatis核心配置文件
- 映射文件
- 步骤总结
- ①添加MyBatis的坐标
- ②创建user数据表
- ③编写User实体类
- ④编写映射文件UserMapper.xml
- ⑤编写核心文件SqlMapConfig.xml
- ⑥编写测试类
- ```java package com.jquan.test;
import com.jquan.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 org.junit.Test;
import java.io.IOException; import java.io.InputStream; import java.util.List;
public class MyBatisTest {
@Test
public void test5() throws IOException {
/*获得核心配置文件*/
InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");
/*获得session工厂对象*/
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
/*获得session对话对象*/
SqlSession sqlSession = sqlSessionFactory.openSession();
User user = new User();
user.setUsername("lisi");
user.setPassword("123456");
user.setId(2);
/*执行操作:参数(namespace+id)*/
sqlSession.update("userMapper.update",user);
sqlSession.close();
}
@Test
public void test4() throws IOException {
/*获得核心配置文件*/
InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");
/*获得session工厂对象*/
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
/*获得session对话对象*/
SqlSession sqlSession = sqlSessionFactory.openSession();
/*执行操作:参数(namespace+id)*/
sqlSession.delete("userMapper.delete",0);
sqlSession.close();
}
@Test
public void test3() throws IOException {
/*获得核心配置文件*/
InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");
/*获得session工厂对象*/
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
/*获得session对话对象*/
SqlSession sqlSession = sqlSessionFactory.openSession();
User user = new User();
user.setUsername("ali");
user.setPassword("123");
/*执行操作:参数(namespace+id)*/
sqlSession.insert("userMapper.saveUser",user);
sqlSession.close();
}
@Test
public void test2() throws IOException {
/*获得核心配置文件*/
InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");
/*获得session工厂对象*/
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
/*获得session对话对象*/
SqlSession sqlSession = sqlSessionFactory.openSession();
/*执行操作:参数(namespace+id)*/
List<User> userList = sqlSession.selectOne("userMapper.findById",1);
System.out.println(userList);
sqlSession.close();
}
@Test
public void test1() throws IOException {
/*获得核心配置文件*/
InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");
System.out.println("resourceAsStream: "+resourceAsStream);
/*获得session工厂对象*/
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
System.out.println("sqlSessionFactory: "+sqlSessionFactory);
/*获得session对话对象*/
SqlSession sqlSession = sqlSessionFactory.openSession();
/*执行操作:参数(namespace+id)*/
List<User> userList = sqlSession.selectList("userMapper.findAll");
System.out.println(userList);
sqlSession.close();
}
}
- 核心配置文件
- environments
- ![image.png](https://cdn.nlark.com/yuque/0/2021/png/22442214/1635058285466-95fad848-3530-4d56-b03f-e157c705f5f7.png#clientId=u24a1873a-4763-4&from=paste&height=229&id=uad78e9fb&margin=%5Bobject%20Object%5D&name=image.png&originHeight=458&originWidth=1011&originalType=binary&ratio=1&size=61177&status=done&style=none&taskId=uc00929a1-e395-4d5f-9a93-782013f9edd&width=505.5)
- 常用标签:propertites,typeAliases,mappers
- 映射文件
- ![image.png](https://cdn.nlark.com/yuque/0/2021/png/22442214/1635057959504-fc00d1ad-3d8b-4207-827c-3afee5a40505.png#clientId=u24a1873a-4763-4&from=paste&height=250&id=u295c965a&margin=%5Bobject%20Object%5D&name=image.png&originHeight=499&originWidth=1176&originalType=binary&ratio=1&size=65078&status=done&style=none&taskId=uac61b453-c319-444d-9ab9-bdc4cf789c6&width=588)
- 注意事项
- •插入更新删除操作涉及数据库数据变化,所以要使用sqlSession对象显示的提交事务,即sqlSession.commit()
- •Sql语句中使用#{实体属性名}方式引用实体中的属性值
- parameterType , resultType
- 两个配置文件
```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>
<!--加载外部文件-->
<properties resource="jdbc.properties"></properties>
<!--自定义别名-->
<typeAliases>
<typeAlias type="com.jquan.domain.User" alias="user"/>
</typeAliases>
<!--数据源环境-->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
</environments>
<!--加载映射文件-->
<mappers>
<!--!!!写路径时,最好用 copy ~-->
<!--下面这个,用com/jquan/mapper/UserMapper.xml 是不对的,虽然参考资料是这么写,坑-->
<mapper resource="com.jquan.mapper\UserMapper.xml"/>
</mappers>
</configuration>
<?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">
<mapper namespace="userMapper">
<!--查询全部-->
<select id="findAll" resultType="com.jquan.domain.User">
select * from user
</select>
<!--根据id查询-->
<select id="findById" resultType="user" parameterType="int">
select * from user where id=#{id}
</select>
<!--插入-->
<insert id="saveUser" parameterType="user">
insert into user values (#{id},#{username},#{password});
</insert>
<!--删除-->
<delete id="delete" parameterType="int">
delete from user where id=#{id};
</delete>
<!--修改操作-->
<update id="update" parameterType="user">
update user set username=#{username},password=#{password} where id = #{id}
</update>
</mapper>
导入坐标 ```xml <?xml version=”1.0” encoding=”UTF-8”?> <project xmlns=”http://maven.apache.org/POM/4.0.0“
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
ssmd1 com.jquan 1.0-SNAPSHOT 4.0.0 ssmMybatisQuick war org.mybatis mybatis 3.4.6 mysql mysql-connector-java 5.1.32 junit junit 4.12 log4j log4j 1.2.12
```