Mybatis之数据库连接+PageHelper分页插件+Mybatis-Plus插件
https://www.cnblogs.com/chch213/p/16320820.html
前言
ORM框架:对象关系映射 object relational mapping 半自动ORM映射工具(自己编写sql语句) Hibernater属于全自动
映射规则:数据库表 > 类 | 表字段 > 类的属性 | 表数据 > 对象
JDBC操作数据库
public class JDBCTest { public static void main(String[] args) { Connection connection = null; PreparedStatement preparedStatement = null; ResultSet resultSet = null; try { // 1、数据库连接参数 String url = "jdbc:mysql://localhost:3306/user?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8"; String username = "123"; String password = "123"; // 2、获加载数据库连接驱动 Class.forName("com.mysql.cj.jdbc.Driver"); // 3、创建数据库连接对象 connection = DriverManager.getConnection(url, username, password); // 4、预处理sql语句 preparedStatement = connection.prepareStatement("select * from user"); // 5、执行sql语句 resultSet = preparedStatement.executeQuery(); // 6、解析结果集 while (resultSet.next()) { User user = new User(); user.setUserName(resultSet.getString("username")); System.out.println(user.toString()); } // 7、关闭资源 } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } finally { try { resultSet.close(); preparedStatement.close(); connection.close(); } catch (SQLException e) { e.printStackTrace(); } } } }
Mybatis操作数据库
官网
// 加载核心配置文件 String resource = "org/mybatis/builder/mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); // 获取sqlsession工厂对象 SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder(); SqlSessionFactory factory = builder.build(inputStream); // 通过工厂对象获取sqlsession对象 sqlSession = factory.openSession(true); // 获取接口的实现类代理对象 Mapper mapper = sqlSession.getMapper(T.class); // 通过实现类对象调用方法 User user = mapper.queryUser(id);
Mybatis接口的动态代理实现DAO
Mapper 接口开发需要遵循以下规范:
1) Mapper.xml文件中的namespace与mapper接口的全限定名(包名.类名)相同
2) Mapper接口方法名和Mapper.xml中定义的每个statement的id(唯一标识)相同
3) Mapper接口方法的输入参数类型和mapper.xml中定义的每个sql的parameterType的类型相同
4) Mapper接口方法的输出参数类型和mapper.xml中定义的每个sql的resultType的类型相同
怎么实现动态代理的?
public static void mapperTest() { InputStream is = null; SqlSession sqlSession = null; try { // 加载核心配置文件 is = Resources.getResourceAsStream("mybatis-config.xml"); // 获取sqlSession工厂对象 SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is); // 获取sqlSession对象 sqlSession = sqlSessionFactory.openSession(); // 获取代理对象 IUserServiceDao mapper = sqlSession.getMapper(IUserServiceDao.class); // 调用方法 List<String> list = new ArrayList<>(1); list.add("12"); List<UserVO> userVOList = mapper.queryUserList(list); System.out.println(userVOList.toString()); } catch (IOException e) { e.printStackTrace(); } finally { try { sqlSession.close(); is.close(); } catch (IOException e) { e.printStackTrace(); } } }
getMapper() 方法最终获取到 org.apache.ibatis.binding.MapperProxy 代理对象
- <sql>:抽取 SQL 语句标签。 - <include>:引入 SQL 片段标签。 <sql id=“片段唯一标识”>抽取的 SQL 语句</sql> <include refid=“片段唯一标识”/>
PageHelper分页插件
<plugins> <plugin interceptor="com.github.pagehelper.PageInterceptor"> <property name="helperDialect" value="mysql"/> <property name="reasonable" value="true"/> </plugin> </plugins>
PageHelper.startPage(1, 2); // 开启分页
public class PageHelper extends PageMethod implements Dialect, Chain { private PageParams pageParams; // 分页参数 private PageAutoDialect autoDialect; // 数据源 private PageBoundSqlInterceptors pageBoundSqlInterceptors; // sql处理
Mybatis常用注解
@Insert:实现新增
@Update:实现更新
@Delete:实现删除
@Select:实现查询
@Result:实现结果集封装
@Results:可以与@Result 一起使用,封装多个结果集
@One:实现一对一结果集封装
@Many:实现一对多结果集封装
public interface IUserServiceDao { //查询全部 @Select("SELECT * FROM user") @Results({ @Result(column = "id",property = "id"), @Result(column = "name",property = "name"), @Result( property = "phone", // 被包含对象的变量名 javaType = List.class, // 被包含对象的实际数据类型 column = "id", // 根据查询出的user表的id字段来查询phone表 /* many、@Many 一对多查询的固定写法 select属性:指定调用哪个接口中的哪个查询方法 */ many = @Many(select = "com.exmple.demo.IPhoneDao.selectByCid") ) }) public abstract List<Classes> selectAll(); }
Mybatis-Plus使用
官网
POM文件依赖配置:
<!-- mybatis-plus 插件依赖 --> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus</artifactId> <version>3.5.0</version> </dependency>
Dao层定义接口:
public interface IUserServicePlusDao extends BaseMapper<PhoneNumber> { }
实体类映射表:
@AllArgsConstructor @NoArgsConstructor @Setter @Getter @ToString @EqualsAndHashCode @TableName("phone_number") public class PhoneNumber { // id private String id; // 地址 private String address; // 用户 private String userId; // 有效标志 private String isValid; // 创建时间 private Date createDate; }