Mybatis系列(一)入门
Mybatis系列(一)入门
mybatis简介
MyBatis 是支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架。MyBatis 消除 了几乎所有的 JDBC 代码和参数的手工设置以及结果集的检索。MyBatis 使用简单的 XML 或注解用于配置和原始映射,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java 对象)映射成数据库中的记录。
每个MyBatis应用程序主要都是使用SqlSessionFactory实例的,一个SqlSessionFactory实例可以通过SqlSessionFactoryBuilder获得。SqlSessionFactoryBuilder可以从一个xml配置文件或者一个预定义的配置类的实例获得。
用xml文件构建SqlSessionFactory实例是非常简单的事情。推荐在这个配置中使用类路径资源(classpath resource),但你可以使用任何Reader实例,包括用文件路径或file://开头的url创建的实例。MyBatis有一个实用类----Resources,它有很多方法,可以方便地从类路径及其它位置加载资源。
MyBatis 最强大的特性之一就是它的动态语句功能。如果您以前有使用JDBC或者类似框架的经历,您就会明白把SQL语句条件连接在一起是多么的痛苦,要确保不能忘记空格或者不要在columns列后面省略一个逗号等。动态语句能够完全解决掉这些痛苦。尽管与动态SQL一起工作不是在开一个party,但是MyBatis确实能通过在任何映射SQL语句中
使用强大的动态SQL来改进这些状况。
动态SQL元素对于任何使用过JSTL或者类似于XML之类的文本处理器的人来说,都是非常熟悉的。在上一版本中,需要了解和学习非常多的元素,但在MyBatis 3 中有了许多的改进,现在只剩下差不多二分之一的元素。MyBatis使用了基于强大的OGNL表达式来消除了大部分元素。
项目中mybatis依赖
<!--mybatis依赖--> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.4.5</version> </dependency> <!--mysql依赖--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.21</version> </dependency>
applications.properties文件:
#mysql数据库配置 spring.datasource.url=jdbc:mysql://localhost:3306/test spring.datasource.username=root spring.datasource.password=root spring.datasource.driver-class-name=com.mysql.jdbc.Driver
mybatis-config-local.xml:
<!-- 引入外部配置文件 --> <properties resource="application.properties"></properties> <!-- 配置mybatis运行环境 --> <environments default="master"> <environment id="master"> <!-- type="JDBC" 代表使用JDBC的提交和回滚来管理事务 --> <transactionManager type="JDBC" /> <!-- mybatis提供了3种数据源类型,分别是:POOLED,UNPOOLED,JNDI --> <!-- POOLED 表示支持JDBC数据源连接池 --> <!-- UNPOOLED 表示不支持数据源连接池 --> <!-- JNDI 表示支持外部数据源连接池 --> <dataSource type="POOLED"> <property name="driver" value="${spring.datasource.driver-class-name}" /> <property name="url" value="${spring.datasource.url}" /> <property name="username" value="${spring.datasource.username}" /> <property name="password" value="${spring.datasource.password}" /> </dataSource> </environment> <environment id="slave"> <!-- type="JDBC" 代表使用JDBC的提交和回滚来管理事务 --> <transactionManager type="JDBC" /> <!-- mybatis提供了3种数据源类型,分别是:POOLED,UNPOOLED,JNDI --> <!-- POOLED 表示支持JDBC数据源连接池 --> <!-- UNPOOLED 表示不支持数据源连接池 --> <!-- JNDI 表示支持外部数据源连接池 --> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver" /> <property name="url" value="jdbc:mysql://localhost:3306/user" /> <property name="username" value="root" /> <property name="password" value="root" /> </dataSource> </environment> </environments>
<mappers>
<mapper resource="dao/UserDaoMapper.xml"/>
</mappers>
DBTools类:
import org.apache.ibatis.session.SqlSessionFactory; import java.io.Reader; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactoryBuilder; public class DBTools { public static SqlSessionFactory sessionFactory; static{ try { //使用MyBatis提供的Resources类加载mybatis的配置文件 Reader reader = Resources.getResourceAsReader("mybatis-config-local.xml"); //构建sqlSession的工厂 sessionFactory = new SqlSessionFactoryBuilder().build(reader); } catch (Exception e) { e.printStackTrace(); } } //创建能执行映射文件中sql的sqlSession public static SqlSession getSession(){ return sessionFactory.openSession(); } }
建立对象User:
public class User { private int id; private int age; private String name; private String role; private String email; private String phone; public int getId() { return id; } public void setId(int id) { this.id = id; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getRole() { return role; } public void setRole(String role) { this.role = role; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public String getPhone() { return phone; } public void setPhone(String phone) { this.phone = phone; } @Override public String toString() { return "User{" + "id=" + id + ", age=" + age + ", name='" + name + '\'' + ", role='" + role + '\'' + ", email='" + email + '\'' + ", phone='" + phone + '\'' + '}'; } }
建立UserService类:
import com.example.mapper.mybatisMap.dao.UserDao; import com.example.mapper.mybatisMap.entity.User; import com.example.mapper.mybatisMap.tool.DBTools; import org.apache.ibatis.session.SqlSession; import java.util.ArrayList; public class UserService { public ArrayList<User> selectGoodsByGoodId(String name, int age){ SqlSession session = DBTools.getSession(); UserDao userDao = session.getMapper(UserDao.class); ArrayList<User> listName = userDao.findInfoList(name, age); return listName; } public Integer selectCount(String name, int age){ SqlSession session = DBTools.getSession(); UserDao userDao = session.getMapper(UserDao.class); int listName = userDao.findCount(name, age); return listName; } }
建立接口类UserDao:
import com.example.mapper.mybatisMap.entity.OOO; import com.example.mapper.mybatisMap.entity.Student; import com.example.mapper.mybatisMap.entity.User; import com.example.mapper.mybatisMap.entity.User_c; import org.apache.ibatis.annotations.Param; import java.util.ArrayList; import java.util.List; public interface UserDao { ArrayList<User> findInfoList(@Param("name") String name, @Param("age") int age); Integer findCount(@Param("name") String name, @Param("age") int age); }
建立UserDaoMapper.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:命名空间,对statement的信息进行分类管理 --> <!-- 注意:在mapper代理时,它具有特殊及重要的作用 --> <mapper namespace="com.example.mapper.mybatisMap.dao.UserDao"> <resultMap id="UserInfo" type="com.example.mapper.mybatisMap.entity.User"> <id column="id" property="id"/> <result column="age" property="age"/> <result column="name" property="name"/> <result column="role" property="role"/> <result column="email" property="email"/> <result column="phone" property="phone"/> </resultMap> <resultMap id="OOO" type="com.example.mapper.mybatisMap.entity.OOO"> <result column="name" property="namesss"/> </resultMap> <!--根据物品id查询公社系统物品的配置信息--> <select id="findInfoList" resultType="com.example.mapper.mybatisMap.entity.User"> SELECT id, age ,name, role, email,phone FROM user WHERE age =#{age} and name =#{name} </select> </mapper>
到此直接调用
UserService.selectGoodsByGoodId()
UserService.selectCount()
就可以了。
但是这种用方法不太好扩展,不太规范,后面将使用接口+实现的方式实现更加规范的方式。
程序员的眼里,不止有代码和bug,还有诗与远方和妹子!!!