Mybatis
因为JDBC的代码过于繁琐,代码复用性不高,效率低下,所以出现了Mybatis框架也就是所mybatis是操作数据库,mybatis作用于持久层,
Mybatis的作用
- Mybatis就是帮助程序员将数据存取到数据库里面。
- 传统的jdbc操作 , 有很多重复代码块 .比如 : 数据取出时的封装 , 数据库的建立连接等等… , 通过框架可以减少重复代码,提高开发效率 .
- MyBatis 是一个半自动化的ORM框架 (Object Relationship Mapping) -->对象关系映射。
MyBatis的优点
- 简单易学:本身就很小且简单。没有任何第三方依赖,最简单安装只要两个jar文件+配置几个sql映射文件就可以了,易于学习,易于使用,通过文档和源代码,可以比较完全的掌握它的设计思路和实现。
- 灵活:mybatis不会对应用程序或者数据库的现有设计强加任何影响。sql写在xml里,便于统一管理和优化。通过sql语句可以满足操作数据库的所有需求。
- 解耦:通过提供DAO层,将业务逻辑和数据访问逻辑分离,使系统的设计更清晰,更易维护,更易单元测试。sql和代码的分离,提高了可维护性。
- 提供xml标签,支持编写动态sql。
Mybatis的使用
1、创建mybatis的配置文件,mybatis-config.xml,用于配置mybatis的配置信息
1.1、配置文件表头不做解释,直接copy
1.2、标签:是mybatis中的根标签,所有配置都在该标签里面书写
1.3、标签:用于导入配置数据库的配置,避免代码硬编译(下次修改数据库时不需要对源代码进行修改,利于维护)
1.4、标签:mybatis的环境(环境标签,default指代标签里面环境的id),可以是多个环境中切换,如测试环境,或者运行环境
1.5、 标签:启用的事务,这里使用的是JDBC
1.6、标签:配置数据库的连接,驱动,url,用户名,密码等
1.7、标签:映射sql文件所在的路径(这里是在同一文件夹下)
<?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文件--> <properties resource="db.properties"></properties> <environments default="development"> <environment id="development"> <!-- 事务 --> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <!-- 驱动--> <property name="driver" value="${driver}"/> <!-- url ;serverTimezone=UTC;useSSL=false; --> <property name="url" value="${url}"/> <property name="username" value="${username}"/> <property name="password" value="${password}"/> </dataSource> </environment> </environments> <!-- 加载执行sql配置文件的路径 --> <mappers> <mapper resource="UserMapper.xml"/> </mappers> </configuration>
2、sql映射xml文件、
2.1、标签:指定使用映射文件的java类路径(这里使用的接口)
2.2、标签:使用的是查询语句,注意:这里的id对应的是接口中的方法,需要保持一致, resultType="com.wzk.pojo.User"参数表示返回值的类型
<?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="com.wzk.mapper.UserMapper"> <!-- id:唯一标识 resultType:返回类型是User类型 注意:返回的类型需要与数据库中的字段保持一致否则无法映射--> <!-- 使用动态代理时:id需要与接口中的方法一致,才能够映射--> <select id="selectById" resultType="com.wzk.pojo.User"> select * from user where id = #{id} </select> </mapper>
3、接口Java类
import com.wzk.pojo.User; /** * @author Administrator * @date 2023/9/1 **/ public interface UserMapper { User selectById(Integer id); }
4、测试类
/** * @author wzk * @date 2023/9/1 **/ public class TestMybatis { @Test public void test01() throws IOException { // 读取映射文件 InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml"); // 创建sqlSessionFactory对象 SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); // 获取SqlSession(相当于Connection) SqlSession session = sqlSessionFactory.openSession(); //底层使用动态代理 UserMapper mapper = session.getMapper(UserMapper.class); //执行sql User user = mapper.selectById(1); System.out.println(user); //关闭资源 session.close(); } }
注意:
-
1、在项目中的文件可以统一放在config包下,方便使用
-
2、使用接口代理(如:UserMapper)时,接口中的方法需要于对应的配置文件(如:UserMapper.xml)文件中执行sql的id进行对应
-
3、在数据库中的变量名于实体类中的变量名不一致时,可以使用标签中的属性进行对应
<?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="com.hqyj.gyq.mapper.UserMapper"> <resultMap id="showUser" type="com.hqyj.gyq.entity.User"> <id property="id" column="id"></id> <result property="userName" column="user_name"></result> <result property="userAge" column="user_age"></result> <result property="userSex" column="user_sex"></result> </resultMap> <!--接口方式访问,id值必须跟接口中的方法名一样--> <select id="selectUserById" parameterType="int" resultMap="showUser"> select * from t_user where id = #{id} </select> </mapper>
-
- 提供xml标签,支持编写动态sql。