1.什么是ORM?
ORM即对象关系映射(Object-Relationl Mapping),它的作用是在关系型数据库和对象之间作一个映射,这样,我们在具体的操作数据库的时候,就不需要再去和复杂的SQL语句打交道,只要像平时操作 对象一样操作它就可以了 。
-------------------------------------------------------------------
创建 maven 项目:
1.在 pom.xml 中引入 jar 包。
-
- <dependency>
- <groupId>org.mybatisgroupId>
- <artifactId>mybatisartifactId>
- <version>3.2.8version>
- dependency>
- <dependency>
- <groupId>mysqlgroupId>
- <artifactId>mysql-connector-javaartifactId>
- <version>5.1.44version>
- dependency>
2.创建 mybatis-config.xml主配置文件
3.将 database.properties 文件放入 resources 下
4.在 mybatis-config.xml 读取 database.properties
- "1.0" encoding="UTF-8" ?>
- configuration
- PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
- "https://mybatis.org/dtd/mybatis-3-config.dtd">
- <configuration>
-
- <properties resource="database.properties">properties>
-
- <environments default="smbms">
- <environment id="smbms">
-
- <transactionManager type="JDBC"/>
-
-
- <dataSource type="POOLED">
- <property name="driver" value="${driver}"/>
- <property name="url" value="${url}"/>
- <property name="username" value="${user}"/>
- <property name="password" value="${password}"/>
- dataSource>
- environment>
- environments>
-
- <mappers>
- <mapper resource="mappers/ProviderMapper.xml"/>
- mappers>
-
- configuration>
5.创建com.hz.pojo并复制Provider.java
6.创建DAO接口
7.在resources下创建mappers文件夹,并创建ProviderMapper.xml
8.编写mapper文件 实现findProviderById(Integer id);方法
- "1.0" encoding="UTF-8" ?>
- mapper
- PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
- "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-
- <mapper namespace="com.hz.dao.ProviderDao">
- <select id="findProviderById" parameterType="Long" resultType="com.hz.pojo.Provider">
- select * from smbms_provider where id = ${id}
- select>
- mapper>
9.在主配置文件中读取mapper文件
- <mappers>
- <mapper resource="mappers/ProviderMapper.xml" />
- mappers>
10.创建测试类 并编写代码
- try {
- //读取主配置文件 返回流
- InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
- //创建SqlSession工厂类
- SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
- //创建sqlSession
- /**
- * true 自动提交事务 (默认)
- * false 关闭自动提交
- */
- SqlSession sqlSession = sqlSessionFactory.openSession(true);
- //获得ProviderDao实例
- ProviderDao providerDao = sqlSession.getMapper(ProviderDao.class);
- Provider provider = providerDao.findProviderById(2L);
- System.out.println(provider.toString());
- sqlSession.close();
- is.close();
-
- } catch (Exception e) {
- e.printStackTrace();
- }
-
- }
---------------------------------------------------------------------------------
mapper.xml的SQL语句中的占位符${}和#{}
- #{ }:会将其替换为?,为了防止SQL注入
- ${ }:拼sql,会存在SQL注入问题
- 使用时机:
- 参数传递的时候用:#{ }
- 表名或者列名不固定的情况下:${ }
一般会采用#{},#{}在mybatis中,最后会被解析为?,其实就是Jdbc的PreparedStatement中的?占位符,它有预编译的过程,会对输入参数进行类型解析(如果入参是String类型,设置参数时会自动加上引号),可以防止SQL注入,如果parameterType属性指定的入参类型是简单类型的话(简单类型指的是8种java原始类型再加一个String),#{}中的变量名可以任意,如果入参类型是pojo,比如是Student类
- public class Student{
- private String name;
- private Integer age;
- //setter/getter
- }
那么#{name}表示取入参对象Student中的name属性,#{age}表示取age属性,这个过程是通过反射来做的,这不同于${},${}取对象的属性使用的是OGNL(Object Graph Navigation Language)表达式