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

一 创建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性能优化、分布式架构等这些成为架构师必备

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,491评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,856评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,745评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,196评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,073评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,112评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,531评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,215评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,485评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,578评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,356评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,215评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,583评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,898评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,174评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,497评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,697评论 2 335

推荐阅读更多精彩内容

  • 1 Mybatis入门 1.1 单独使用jdbc编程问题总结 1.1.1 jdbc程序 上边使...
    哇哈哈E阅读 3,284评论 0 38
  • Mybatis介绍 MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache...
    day_Sunny阅读 2,619评论 0 6
  • MyBatis是一个可以自定义SQL、存储过程和高级映射的持久层框架。MyBatis 摒除了大部分的JDBC代码、...
    七寸知架构阅读 6,687评论 6 56
  • 老屋 满院的鹅卵石铺了岁月的尘 不再光洁如故 还记着 那颗磕破了我的额角留下印痕 院中的空地上 一棵老杏一半繁花一...
    平眉阅读 335评论 1 5
  • 林森家楼下有片空地,深冬时空地中的花园里会堆满积雪,有天早上他一出门,就看到花园里的雪竟被堆成了一架钢琴的...
    广电一班安梦圆阅读 343评论 0 0