Java分布式高可用架构Java 杂谈

Mybatis—接口实现增删改查和分页查询

2019-01-06  本文已影响4人  Java高级进阶

一 创建UserMapper接口

package com.yuyi.mapper;

   import java.util.List;

    import org.apache.ibatis.annotations.Delete;

    import org.apache.ibatis.annotations.Insert;

    import org.apache.ibatis.annotations.Param;

    import org.apache.ibatis.annotations.Select;

    import com.yuyi.pojo.User;

   public interface UserMapper {

    @Insert("insert into user(username) values (#{username})")

    public int addUser(User user);

   @Select("select * from user where id=#{id}")

    public User getUserById(int id);

   @Delete("DELETE FROM user WHERE id=#{id}")

    public void deleteUser(int id);

    @Select("SELECT * from user")

    public List<User> findAllUser();

     @Select("select * from user limit #{start},#{count} ")

    public List<User> listByPage(@Param("start") int start, @Param("count")int count);

     @Select("select count(*) from user")

    public int count();

    }

二 配置SqlMapConfig.xml文件

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE configuration

PUBLIC "-//mybatis.org//DTD Config 3.0//EN"

"http://mybatis.org/dtd/mybatis-3-config.dtd">

<configuration>

<plugins>

<plugin interceptor="com.github.pagehelper.PageInterceptor">

</plugin>

</plugins>

<environments default="mysql">

<environment id="mysql">

<transactionManager type="JDBC" />

<dataSource type="POOLED">

<property name="driver" value="com.mysql.jdbc.Driver" />

<property name="url" value="jdbc:mysql://localhost:3306/mybatis" />

<property name="username" value="账号" />

<property name="password" value="密码" />

</dataSource>

</environment>

</environments>

<mappers>

<mapper class="com.yuyi.mapper.UserMapper"/>

</mappers>

</configuration>

三 测试

import java.util.List;

import org.apache.ibatis.session.SqlSession;

import org.apache.ibatis.session.SqlSessionFactory;

import org.junit.Test;

import com.yuyi.mapper.UserMapper;

import com.yuyi.pojo.User;

import com.yuyi.util.SqlSessionFactoryUtil;

public class UserTest {

@Test

public void testGetUserById() {

SqlSessionFactory sessionFactory=SqlSessionFactoryUtil.getSqlSessionFactory();

SqlSession sqlSession=sessionFactory.openSession(true);

UserMapper userMapper=sqlSession.getMapper(UserMapper.class);

User user=userMapper.getUserById(27);

System.out.println(user);

sqlSession.commit();

sqlSession.close();

}

@Test

public void testAddUser() {

SqlSessionFactory sessionFactory=SqlSessionFactoryUtil.getSqlSessionFactory();

SqlSession sqlSession=sessionFactory.openSession(true);

UserMapper userMapper=sqlSession.getMapper(UserMapper.class);

User user=new User();

user.setUsername("xxx");

userMapper.addUser(user);

}

@Test

public void testDeleteUser() {

SqlSessionFactory sessionFactory=SqlSessionFactoryUtil.getSqlSessionFactory();

SqlSession sqlSession=sessionFactory.openSession(true);

UserMapper userMapper=sqlSession.getMapper(UserMapper.class);

userMapper.deleteUser(127);

}

@Test

public void testFindAllUser() {

SqlSessionFactory sessionFactory=SqlSessionFactoryUtil.getSqlSessionFactory();

SqlSession sqlSession=sessionFactory.openSession(true);

UserMapper userMapper=sqlSession.getMapper(UserMapper.class);

List<User> listUser=userMapper.findAllUser();

for (User user : listUser) {

System.out.println(user.getUsername());

}

}

@Test

public void testListByPage() {

SqlSessionFactory sessionFactory=SqlSessionFactoryUtil.getSqlSessionFactory();

SqlSession sqlSession=sessionFactory.openSession(true);

UserMapper userMapper=sqlSession.getMapper(UserMapper.class);

List<User> listUser=userMapper.listByPage(2, 100);

for (User user : listUser) {

System.out.println(user.getUsername());

}

sqlSession.commit();

sqlSession.close();

}

@Test

public void testCount() {

SqlSessionFactory sessionFactory=SqlSessionFactoryUtil.getSqlSessionFactory();

SqlSession sqlSession=sessionFactory.openSession(true);

UserMapper userMapper=sqlSession.getMapper(UserMapper.class);

int count=userMapper.count();

System.out.println("总数为:"+count);

sqlSession.commit();

sqlSession.close();

}

}

四 DTD文件的配置

window——preferences——XML——XML Catalog——Add

配置好mapper.dtd和config.dtd后再重新打开后就会有相应的提示

五 配置文件

environments环境

MyBatis可以配置多种环境,比如开发、测试和生

产环境需要有不同的配置。

• 每种环境使用一个environment标签进行配置并指

定唯一标识符

• 可以通过environments标签中的default属性指定

一个环境的标识符来快速的切换环境

environment-指定具体环境

id:指定当前环境的唯一标识

• transactionManager、和dataSource都必须有

transactionManager

type: JDBC | MANAGED | 自定义

– JDBC:使用了 JDBC 的提交和回滚设置,依赖于从数

据源得到的连接来管理事务范围。

JdbcTransactionFactory

– MANAGED:不提交或回滚一个连接、让容器来管理

事务的整个生命周期(比如 JEE 应用服务器的上下

文)。 ManagedTransactionFactory

– 自定义:实现TransactionFactory接口,type=全类名/

别名

dataSource

type: UNPOOLED | POOLED | JNDI | 自定义

– UNPOOLED:不使用连接池,

UnpooledDataSourceFactory

– POOLED:使用连接池, PooledDataSourceFactory

– JNDI: 在EJB 或应用服务器这类容器中查找指定的数

据源

– 自定义:实现DataSourceFactory接口,定义数据源的

获取方式。

• 实际开发中我们使用Spring管理数据源,并进行

事务控制的配置来覆盖上述配置

六 SqlSession

SqlSession 的实例不是线程安全的,因此是不能

被共享的。

• SqlSession每次使用完成后需要正确关闭,这个

关闭操作是必须的

• SqlSession可以直接调用方法的id进行数据库操

作,但是我们一般还是推荐使用SqlSession获取

到Dao接口的代理类,执行代理对象的方法,可

以更安全的进行类型检查操作

在此我向大家推荐一个架构学习交流群。交流学习群号:938837867 暗号:555 里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化、分布式架构等这些成为架构师必备

上一篇下一篇

猜你喜欢

热点阅读