db.properties
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/igeekmybatis?characterEncoding=utf-8
jdbc.username=root
jdbc.password=root
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>
<!-- 是用resource属性加载外部配置文件 -->
<properties resource="db.properties">
<!-- 如果外部配置文件有该属性,则内部定义属性被外部属性覆盖-->
<property name="jdbc.password" value="root123"/>
</properties>
<!-- 类型别名 -->
<!-- 配置映射文件中使用的类型别名 -->
<typeAliases>
<!-- 给类型 com.igeek.crm.pojo.User取别名user-->
<typeAlias type="com.igeek.crm.pojo.User" alias="user"/>
<!-- 配置一个包,让该包中所有的类都是用简称 -->
<package name="com.igeek.crm.pojo"/>
</typeAliases>
<!-- 和spring整合后 environments配置将废除 -->
<environments default="development">
<environment id="development">
<!-- 使用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>
<!-- 注册映射文件 -->
<!-- 将映射文件配置到mybatis的配置文件中 -->
<mappers>
<!--
<mapper resource="sqlmap/UserMapper.xml"/>
-->
<!--
<mapper class="com.igeek.crm.mapper.UserMapper"/>
-->
<package name="com.igeek.crm.mapper"/>
</mappers>
</configuration>
UserMapper.java
package com.igeek.crm.mapper;
import java.util.List;
import java.util.Map;
import com.igeek.crm.pojo.User;
/**
* @author www.igeehome.com
*
* TODO 类似与以前的dao接口
*
* 2018年10月15日下午7:02:12
*/
public interface UserMapper {
public int save(User user);
public User queryById(int id);
public List<User> queryByName(String name);
public List<User> queryAll();
public int update(User user);
public int delete(int id);
/**
* 通过名称和地址查询
* @param name 模糊查询
* @param address 精确查询
* @return
*/
public List<User> queryUserByNameAndAddress(String name,String address);
/**
* 通过名称和地址查询
* @param map map中的数据是 {name=xxx,address=xxxx}
* @return
*/
public List<User> queryUserByNameAndAddress1(Map params);
/**
* 通过用户的ID查询用户信息和订单信息
* @param userId
* @return {username:"xxxx",id:xx,createTime:date}
*/
public Map<String,Object> queryUserOrderInfo(int userId);
/**
* 查询用户信息和订单信息
* @param userId
* @return [{username:"xxxx",id:xx,createTime:date},
* {username:"xxxx",id:xx,createTime:date}
* .....
* ]
*/
public List<Map<String,Object>> queryUserOrderInfo1();
}
UserMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- namespace:命名空间,用于隔离sql,还有一个很重要的作用,后面会讲 -->
<mapper namespace="com.igeek.crm.mapper.UserMapper">
<!-- 添加用户 -->
<insert id="save" parameterType="user">
insert into user(userName,birthday,sex,address)
values(#{username},#{birthday},#{sex},#{address})
</insert>
<!-- 根据ID查询用户 -->
<select id="queryById" parameterType="_int" resultType="user">
select * from user where id = #{id}
</select>
<!-- 根据名称模糊查询 -->
<select id="queryByName" parameterType="string" resultType="User">
select * from user where username like '%${value}%'
</select>
<!-- 查询全部 -->
<select id="queryAll" resultType="user">
select id,username as uname,birthday,address,sex from user
</select>
<!-- 修改用户信息 -->
<update id="update" parameterType="user">
update user set username=#{username},birthday=#{birthday},sex=#{sex},address=#{address} where id=#{id}
</update>
<!-- 根据ID删除用户 -->
<delete id="delete" parameterType="int">
delete from user where id = #{id}
</delete>
<!-- 通过名称和地址查询 -->
<!-- 输入参数有两个, 类型无法确定,暂时不写 -->
<select id="queryUserByNameAndAddress" resultType="user">
select * from user where address = #{1} and userName like #{0}
</select>
<!-- 通过名称和地址查询 -->
<!-- 使用map作为输入参数 -->
<select id="queryUserByNameAndAddress1" parameterType="map" resultType="user">
select * from user where address = #{address} and userName like #{name}
</select>
<!-- 根据用户的ID查询用户的名称和订单信息 -->
<select id="queryUserOrderInfo" parameterType="int" resultType="map">
select u.username,o.id,o.createTime from user u,orders o where u.id = o.user_id and u.id=#{id}
</select>
<!-- 查询用户的名称和订单信息 -->
<select id="queryUserOrderInfo1" resultType="map">
select u.username,o.id,o.createTime from user u,orders o where u.id = o.user_id
</select>
</mapper>
User.java
package com.igeek.crm.pojo;
import java.util.Date;
/**
* @author www.igeehome.com
*
* TODO
*
* 2018年10月13日下午2:15:12
*/
public class User {
private int id;
private String username;
private Date birthday;
private int sex;
private String address;
private String uuid;
/**
* @return the uuid
*/
public String getUuid() {
return uuid;
}
/**
* @param uuid the uuid to set
*/
public void setUuid(String uuid) {
this.uuid = uuid;
}
/**
* @return the id
*/
public int getId() {
return id;
}
/**
* @param id the id to set
*/
public void setId(int id) {
this.id = id;
}
/**
* @return the username
*/
public String getUsername() {
return username;
}
/**
* @param username the username to set
*/
public void setUsername(String username) {
this.username = username;
}
/**
* @return the birthday
*/
public Date getBirthday() {
return birthday;
}
/**
* @param birthday the birthday to set
*/
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
/**
* @return the sex
*/
public int getSex() {
return sex;
}
/**
* @param sex the sex to set
*/
public void setSex(int sex) {
this.sex = sex;
}
/**
* @return the address
*/
public String getAddress() {
return address;
}
/**
* @param address the address to set
*/
public void setAddress(String address) {
this.address = address;
}
/**
* @param id
* @param username
* @param birthday
* @param sex
* @param address
*/
public User(int id, String username, Date birthday, int sex, String address) {
super();
this.id = id;
this.username = username;
this.birthday = birthday;
this.sex = sex;
this.address = address;
}
/**
*
*/
public User() {
super();
// TODO Auto-generated constructor stub
}
/* (non-Javadoc)
* @see java.lang.Object#toString()
*/
@Override
public String toString() {
return "User [id=" + id + ", username=" + username + ", birthday=" + birthday + ", sex=" + sex + ", address="
+ address + ", uuid=" + uuid + "]";
}
}
MyBatisTest.java
package com.igeek.crm.test;
import java.io.InputStream;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Before;
import org.junit.Test;
import com.igeek.crm.mapper.UserMapper;
import com.igeek.crm.pojo.User;
/**
* @author www.igeehome.com
*
* TODO
*
* 2018年10月13日下午2:11:12
*/
public class MyBatisTest {
SqlSessionFactory factory =null;
private UserMapper userMapper = null;
@Before
public void testInit(){
// 1. 创建SqlSessionFactoryBuilder对象
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
// 2. 加载SqlMapConfig.xml配置文件 /20181013_mybatis/config/SqlMapConfig.xml
InputStream in = MyBatisTest.class.getResourceAsStream("/SqlMapConfig.xml");
// 3. 创建SqlSessionFactory对象
factory = builder.build(in);
}
@Test
public void testQueryMap1(){
SqlSession session = factory.openSession();
//通过session获取一个mapper对象 //通过动态代理实现接口对象
userMapper = session.getMapper(UserMapper.class);
List<Map<String, Object>> list = userMapper.queryUserOrderInfo1();
System.out.println(list);
}
@Test
public void testQueryMap(){
SqlSession session = factory.openSession();
//通过session获取一个mapper对象 //通过动态代理实现接口对象
userMapper = session.getMapper(UserMapper.class);
Map<String, Object> map = userMapper.queryUserOrderInfo(10);
System.out.println(map);
}
@Test
public void testQuerByNameAndAddress1(){
SqlSession session = factory.openSession();
//通过session获取一个mapper对象 //通过动态代理实现接口对象
userMapper = session.getMapper(UserMapper.class);
Map params = new HashMap();
params.put("name", "%小%");
params.put("address", "河南郑州");
List<User> us = userMapper.queryUserByNameAndAddress1(params);
System.out.println(us);
}
@Test
public void testQuerByNameAndAddress(){
SqlSession session = factory.openSession();
//通过session获取一个mapper对象 //通过动态代理实现接口对象
userMapper = session.getMapper(UserMapper.class);
List<User> us = userMapper.queryUserByNameAndAddress("%小%", "河南郑州");
System.out.println(us);
}
@Test
public void testDelete(){
//先查询
int result = userMapper.delete(32);
System.out.println(result);
}
@Test
public void testUpdate(){
SqlSession session = factory.openSession();
//通过session获取一个mapper对象 //通过动态代理实现接口对象
userMapper = session.getMapper(UserMapper.class);
//先查询
User u = userMapper.queryById(34);
System.out.println(u);
u.setUsername("赵六");
int result = userMapper.update(u);
System.out.println(result);
session.commit();
session.close();
}
@Test
public void testQuerByName(){
SqlSession session = factory.openSession();
//通过session获取一个mapper对象 //通过动态代理实现接口对象
userMapper = session.getMapper(UserMapper.class);
List<User> us = userMapper.queryByName("小");
System.out.println(us);
}
@Test
public void testQuerById(){
SqlSession session = factory.openSession();
//通过session获取一个mapper对象 //通过动态代理实现接口对象
userMapper = session.getMapper(UserMapper.class);
User u = userMapper.queryById(34);
System.out.println(u);
}
@Test
public void testSave(){
User user = new User();
user.setUsername("周六");
user.setBirthday(new Date());
user.setSex(1);
user.setAddress("江苏无锡");
//创建一个userMapper
//打开session
SqlSession session = factory.openSession();
//通过session获取一个mapper对象 //通过动态代理实现接口对象
userMapper = session.getMapper(UserMapper.class);
userMapper.save(user);
session.commit();
session.close();
}
}