什么是 MyBatis?
MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。
1.安装
如果使用 Maven 来构建项目,则需将下面的依赖代码置于 pom.xml 文件中:
<dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>x.x.x</version></dependency>
复制代码
2.从 XML 中构建 SqlSessionFactory
每个基于 MyBatis 的应用都是以一个 SqlSessionFactory 的实例为核心的。SqlSessionFactory 的实例可以通过 SqlSessionFactoryBuilder 获得。而 SqlSessionFactoryBuilder 则可以从 XML 配置文件或一个预先配置的 Configuration 实例来构建出 SqlSessionFactory 实例
String resource = "org/mybatis/example/mybatis-config.xml";InputStream inputStream = Resources.getResourceAsStream(resource);SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
复制代码
3.从 SqlSessionFactory 中获取 SqlSession
既然有了 SqlSessionFactory,顾名思义,我们可以从中获得 SqlSession 的实例。SqlSession 提供了在数据库执行 SQL 命令所需的所有方法。你可以通过 SqlSession 实例来直接执行已映射的 SQL 语句。例如:
try (SqlSession session = sqlSessionFactory.openSession()) { Blog blog = (Blog) session.selectOne("org.mybatis.example.BlogMapper.selectBlog", 101);}
复制代码
查询
1.查看详情
1.编写接口方法:Mapper 接口 2.编写 SQL 语句:SQL 映射文件 3.编写测试用例
1.编写接口方法/***查看详情:根据ID查询*/Brand selectById(int id);
复制代码
2.编写SQL语句id:唯一标识type:映射的类型,支持别名--><resultMap id="brandResultMap" type="brand"><result column="brand_name" property="brandName"/>//column:表的别名<result column="company_name" property="companyName"/>//property:实体类的属性名</resultMap><select id="selectAll" resultMap="brandResultMap">select * from where id="#{id}";</select>id:完成主键字段的映射result:完成一般字段的映射
复制代码
3.编写测试用例@Test public void testSelectById(){//接收参数int id= 1;//1.获取SqlSessionFactoryString resource = "org/mybatis/example/mybatis-config.xml";InputStream inputStream = Resources.getResourceAsStream(resource);SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);//2.获取SqlSession对象SqlSession sqlSession = sqlSessionFactory.openSession();//3.获取Mapper接口的代理对象BrandMapper brandMapper = sqlSession.getMapper(BrandMapper.class);//4.执行方法Brand brand = brandMapper.selectById(id)system.out.println(brand);//5.释放资源sqlSession.close();}
复制代码
2.参数占位符
1.#{}:会将其替换为?为了防止Sql注入2.${}:拼Sql,会存在Sql注入问题
复制代码
注:最好用 #{}
评论