MyBatis注解开发

·

第一章:MyBatis框架注解开发

1. 注解方式单表的CRUD的操作

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>

<!-- 单独管理数据库的信息,读取外部配置文件 -->

<properties resource="jdbc.properties"></properties>

<settings>

<!-- 开启延迟加载 -->

<setting name="lazyLoadingEnabled" value="true"/>

<!-- 将积极加载改为消极加载及按需加载 -->

<setting name="aggressiveLazyLoading" value="false"/>

<!-- 开启二级缓存 -->

<setting name="cacheEnabled" value="true"/>

</settings>

<!-- 注册别名 -->

<typeAliases>

<!-- 默认的规范,该包下所有的JavaBean都默认的别名,当前类名做为别名 -->

<package name="com.qcbyjy.domain"/>

</typeAliases>

<!-- 配置环境们 -->

<environments default="mysql">

<!-- 配置具体的环境 -->

<environment id="mysql">

<!-- 配置事务管理,使用JDBC的事务管理 -->

<transactionManager type="JDBC"/>

<dataSource type="POOLED">

<!-- 具体连接的信息配置上 -->

<property name="driver" value="${jdbc.driver}"/>

<property name="url" value="${jdbc.url}"/>

<property name="username" value="${jdbc.username}"/>

<property name="password" value="${jdbc.password}"/>

</dataSource>

</environment>

</environments>

<!-- 引入mapper的配置文件 -->

<mappers>

<package name="com.qcbyjy.mapper"/>

</mappers>

</configuration>

UserMapper接口方法和注解的编写

package cn.tx.mapper;

import java.util.List;

import org.apache.ibatis.annotations.Delete;

import org.apache.ibatis.annotations.Insert;

import org.apache.ibatis.annotations.Result;

import org.apache.ibatis.annotations.ResultMap;

import org.apache.ibatis.annotations.Results;

import org.apache.ibatis.annotations.Select;

import org.apache.ibatis.annotations.Update;

import cn.tx.domain.User;

/**

* 在MyBatis环境中,UserDao称为UserMapper接口

* @author Administrator

*/

public interface UserMapper {

@Select(value="select * from user")

@Results(id="userMap",value= {

@Result(id=true,column="id",property="id"),

@Result(column="username",property="username"),

@Result(column="birthday",property="birthday"),

@Result(column="sex",property="sex"),

@Result(column="address",property="address")

})

public List<User> findAll();

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

@ResultMap(value="userMap")

public User findById(Integer uid);

// 保存

@Insert(value="insert into user (username,birthday,sex,address) values (#{username},#{birthday},#{sex},#{address})")

public void insert(User user);

// 修改

@Update("update user set username = #{username},birthday=#{birthday},sex=#{sex},address=#{address} where id = #{id}")

public void update(User user);

// 删除

@Delete("delete from user where id = #{id}")

public void delete(Integer userId);

// 查询数量

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

public Integer findByCount();

// 模糊查询

@Select("select * from user where username like #{username}")

public List<User> findByUsername(String username);

}

UserTest测试方法的编写

package cn.tx.test;

import java.io.InputStream;

import java.util.Date;

import java.util.List;

import org.apache.ibatis.io.Resources;

import org.apache.ibatis.session.SqlSession;

import org.apache.ibatis.session.SqlSessionFactory;

import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import org.junit.After;

import org.junit.Before;

import org.junit.Test;

import cn.tx.domain.User;

import cn.tx.mapper.UserMapper;

public class UserTest {

private InputStream in;

private SqlSession session;

SqlSessionFactory factory;

private UserMapper mapper;

// 初始化的方法

@Before

public void init() throws Exception {

// 加载主配置文件

in = Resources.getResourceAsStream("SqlMapConfig.xml");

// 创建工厂对象

factory = new SqlSessionFactoryBuilder().build(in);

// 创建session

session = factory.openSession();

// 获取到代理对象

mapper = session.getMapper(UserMapper.class);

}

// 销毁的方法

@After

public void destory() throws Exception {

// 关闭资源

session.close();

in.close();

}

/**

* 测试查询

* @throws Exception

*/

@Test

public void testFindAll() throws Exception {

// 调用方法

List<User> list = mapper.findAll();

for (User user : list) {

System.out.println(user);

}

}

@Test

public void testFindById() {

User user = mapper.findById(41);

System.out.println(user);

}

/**

* 保存

* @throws Exception

*/

@Test

public void testInsert() throws Exception {

// 创建User对象

User user = new User();

user.setUsername("美美2");

user.setBirthday(new Date());

user.setSex("女");

user.setAddress("监狱");

// 保存

mapper.insert(user);

session.commit();

}

/**

* 测试

* @throws Exception

*/

@Test

public void testUpdate() throws Exception {

// 先通过id查询

User user = mapper.findById(41);

// 设置新的数据内容

user.setUsername("熊大");

user.setAddress("深林深处");

// 修改

mapper.update(user);

session.commit();

}

/**

* 删除

* @throws Exception

*/

@Test

public void testDelete() throws Exception {

mapper.delete(42);

session.commit();

}

/**

* 查询的是聚合函数

* @throws Exception

*/

@Test

public void testFindByCount() throws Exception {

Integer count = mapper.findByCount();

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

}

/**

* 模糊查询

* @throws Exception

*/

@Test

public void testFindByUsername() throws Exception {

// 第一种测试的方式

List<User> list = mapper.findByUsername("%王%");

for (User user : list) {

System.out.println(user);

}

}​

2. 多对一的注解查询

多对一立即加载查询(推荐)

AccountMapper接口编写方法和注解

/**

* 立即加载

* @return

*/

@Select("SELECT a.ID AS aid,a.UID,a.MONEY,u.* FROM account a,USER u WHERE a.UID = u.id")

@Results(value= {

@Result(id=true,column="aid",property="id"),

@Result(column="uid",property="uid"),

@Result(column="money",property="money"),

@Result(column="id",property="user.id"),

@Result(column="username",property="user.username"),

@Result(column="birthday",property="user.birthday"),

@Result(column="sex",property="user.sex"),

@Result(column="address",property="user.address")

})

public List<Account> findAll();

AccountTest进行测试

package cn.tx.test;

import java.io.InputStream;

import java.util.List;

import org.apache.ibatis.io.Resources;

import org.apache.ibatis.session.SqlSession;

import org.apache.ibatis.session.SqlSessionFactory;

import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import org.junit.After;

import org.junit.Before;

import org.junit.Test;

import cn.tx.domain.Account;

import cn.tx.mapper.AccountMapper;

public class AccountTest {

private InputStream in;

private SqlSession session;

private AccountMapper mapper;

// 初始化的方法

@Before

public void init() throws Exception {

// 加载主配置文件

in = Resources.getResourceAsStream("SqlMapConfig.xml");

// 创建工厂对象

SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);

// 创建session

session = factory.openSession();

// 获取到代理对象

mapper = session.getMapper(AccountMapper.class);

}

// 销毁的方法

@After

public void destory() throws Exception {

// 关闭资源

session.close();

in.close();

}

/**

* 测试查询

* @throws Exception

*/

@Test

public void testFindAll() throws Exception {

// 调用方法

List<Account> list = mapper.findAll();

for (Account account : list) {

System.out.println(account);

}

}

}

多对一延迟加载查询

AccountMapper编写方法和注解

/**

* 延迟加载

* @return

*/

@Select("select * from account")

@Results(value= {

@Result(id=true,column="aid",property="id"),

@Result(column="uid",property="uid"),

@Result(column="money",property="money"),

@Result(property="user",javaType=User.class,column="uid",one=@One(select="com.qcbyjy.mapper.UserMapper.findById",fetchType=FetchType.LAZY))

})

public List<Account> findAll();

UserMapper接口编写方法

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

public User findById(Integer uid);

测试

package cn.tx.test;

import java.io.InputStream;

import java.util.List;

import org.apache.ibatis.io.Resources;

import org.apache.ibatis.session.SqlSession;

import org.apache.ibatis.session.SqlSessionFactory;

import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import org.junit.After;

import org.junit.Before;

import org.junit.Test;

import cn.tx.domain.Account;

import cn.tx.mapper.AccountMapper;

public class AccountTest 

private InputStream in;

private SqlSession session;

private AccountMapper mapper;

// 初始化的方法

@Before

public void init() throws Exception {

// 加载主配置文件

in = Resources.getResourceAsStream("SqlMapConfig.xml");

// 创建工厂对象

SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);

// 创建session

session = factory.openSession();

// 获取到代理对象

mapper = session.getMapper(AccountMapper.class);

}

// 销毁的方法

@After

public void destory() throws Exception {

// 关闭资源

session.close();

in.close();

}

/**

* 测试查询

* @throws Exception

*/

@Test

public void testFindAll() throws Exception {

// 调用方法

List<Account> list = mapper.findAll();

for (Account account : list) {

System.out.println(account.getMoney());

System.out.println(account.getUser());

}

}

}

3. 一对多的注解查询

一对多查询,使用延迟加载的方式查询

UserMapper接口编写方法

/**

* 查询用户,延迟加载用户下的所有的账号

* @return

*/

@Select(value="select * from user")

@Results(id="userMap",value= {

@Result(id=true,column="id",property="id"),

@Result(column="username",property="username"),

@Result(column="birthday",property="birthday"),

@Result(column="sex",property="sex"),

@Result(column="address",property="address"),

@Result(property="accounts",column="id",many=@Many(select="com.qcbyjy.mapper.AccountMapper.findByUid",fetchType=FetchType.LAZY))

})

public List<User> findAll();

AccountMapper接口提供方法

@Select("select * from account where uid = #{uid}")

public List<Account> findByUserId(Integer uid);

测试

/**

* 测试查询

* @throws Exception

*/

@Test

public void testFindAll() throws Exception {

// 调用方法

List<User> list = mapper.findAll();

for (User user : list) {

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

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

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值