package cn.itcast.mybatis.domain;
public class User {
private String id;
private String name;
private Integer age;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
@Override
public String toString() {
return "User [id=" + id + ", name=" + name + ", age=" + age
+ ", address=" + address + "]";
}
public void setAge(Integer age) {
this.age = age;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
private String address;
}
<?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的值是可以随意的,只要保证唯一性就可以了,不要和要test类里面的对应 -->
<mapper namespace="cn.itcast.mybatis.domain.User">
<sql id="cols">
id,name,age,address
</sql>
<sql id="ucols">
name=#{name},age=#{age},address=#{address}
</sql>
<!-- 查询所有记录 id值是可以随意的,只是用来标识而已-->
<!-- resultType仍然是User类,会自动封装到list集合里面去-->
<select id="listAll" resultType="xUser">
select <include refid="cols"/> from user_c
</select>
<!--
按条件查询 parameterType本来填cn.itcast.mybatis.domain.User
可以通过在sqlMapConfig.xml写别名来简化,是全局的
-->
<select id="find" parameterType="xUser" resultType="xUser">
select * from user_c
<where>
<if test="name!=null">
and name like "%"#{name}"%"
</if>
<if test="age!=null">
and age=#{age}
</if>
</where>
</select>
<!-- 查询一个用户 -->
<select id="get" parameterType="string" resultType="xUser">
<!-- 可以把字段id,name,age,address提取出来,便于复用 -->
select <include refid="cols"/> from user_c where id=#{id}
</select>
<!-- 新增 -->
<insert id="create" parameterType="xUser">
insert into user_c (id,name,age,address) values(#{id},#{name},#{age},#{address})
</insert>
<!-- 修改 -->
<update id="update" parameterType="xUser">
update user_c
<set>
<if test="name!=null">
name=#{name},
</if>
<if test="age!=null">
age=#{age},
</if>
<if test="address!=null">
address=#{address},
</if>
</set>
where id=#{id}
</update>
<!-- 删除 ,如果是多条件删除的话,同样是传递User-->
<delete id="delete" parameterType="string">
delete from user_c where id=#{id}
</delete>
</mapper>
package test;
import java.io.InputStream;
import java.util.List;
import java.util.UUID;
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.Before;
import org.junit.Test;
import cn.itcast.mybatis.domain.User;
public class TestMybatis {
SqlSessionFactory sqlSessionFactory;
@Before
public void initFactory() throws Exception{
String resource = "sqlMapConfig.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
}
@Test //查询所有
public void testListAll(){
SqlSession session = sqlSessionFactory.openSession();
//通过命名空间+id来说明要找xml配置文件里面的那个,所以User.java和User.xml的名字可以不一致
List<User> users = session.selectList("cn.itcast.mybatis.domain.User.listAll");
System.out.println(users.size());
}
@Test //按条件查询
public void testFind(){
SqlSession session = sqlSessionFactory.openSession();
User u = new User();
u.setName("d");
List<User> users = session.selectList("cn.itcast.mybatis.domain.User.find",u);
System.out.println(users.size());
}
@Test //查询一条
public void testGet(){
SqlSession session = sqlSessionFactory.openSession();
User u = session.selectOne("cn.itcast.mybatis.domain.User.get","2");
System.out.println(u);
}
@Test //新增 除了查询都需要commit
public void testCreate(){
SqlSession session = sqlSessionFactory.openSession();
User u = new User();
u.setId(UUID.randomUUID().toString());
u.setName("tonyxx");
u.setAge(23);
u.setAddress("shanghaixx");
int i = session.insert("cn.itcast.mybatis.domain.User.create",u);
//没有提交的话就不会真的存放到数据库中
session.commit();
System.out.println(i);
}
@Test //修改 除了查询都需要commit
public void testUpdate(){
SqlSession session = sqlSessionFactory.openSession();
// User u = session.selectOne("cn.itcast.mybatis.domain.User.get","6");
// u.setName("rose");
// u.setAge(30);
User u = new User();
u.setId("6");
u.setName("rosexx");
int i = session.update("cn.itcast.mybatis.domain.User.update",u);
session.commit();
System.out.println(i);
}
@Test //删除 除了查询都需要commit
public void testDelete(){
SqlSession session = sqlSessionFactory.openSession();
int i = session.delete("cn.itcast.mybatis.domain.User.delete","74467fde-c2f7-4e9e-a6c9-c28d13476119");
session.commit();
System.out.println(i);
}
}
<?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>
<!-- 对类型起个别名,方便使用 -->
<typeAliases>
<typeAlias type="cn.itcast.mybatis.domain.User" alias="xUser"/>
</typeAliases>
<environments default="development">
<!-- id不是一定要和default的值一样 -->
<environment id="development">
<!-- 事务管理交给jdbc -->
<transactionManager type="JDBC"/>
<!-- 使用pooled连接池,或者不使用连接池,或者jndi远程连接池 -->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatisdb?characterEncoding=UTF-8"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<mappers>
<!-- User不一定是实体文件名字,可以是乱起的 -->
<mapper resource="cn/itcast/mybatis/domain/User.xml"/>
</mappers>
</configuration>