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;
}

浙公网安备 33010602011771号