demo 这个是简单demo的 码云地址 https://git.oschina.net/yuhaifei/Mybatis_demo.git
1.导入jar包
<configuration>
<properties resource="db.properties">properties>
<typeAliases>
<package name="cn.itheima.pojo"/>
typeAliases>
<environments default="development">
<environment id="development">
<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>
<mappers>
<mapper resource="User.xml"/>
mappers>
configuration>
package mode;
import java.sql.Date;
public class User {
private int id;
private String username;// 用户姓名
private String sex;// 性别
private Date birthday;// 生日
private String address;// 地址
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
@Override
public String toString() {
return "User [id=" + id + ", username=" + username + ", sex=" + sex
+ ", birthday=" + birthday + ", address=" + address + "]";
}
}
3.1 还要配置,User.xml文件,这个很关键,这个是把spl语句配置在这个文件里
<mapper namespace="test">
<select id="findUserById" parameterType="java.lang.Integer" resultType="mode.User">
select * from user where id=#{id}
select>
mapper>
package mybatis_demo_01;
import java.io.InputStream;
import mode.User;
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.Test;
public class UserTest {
//有时候,@Test这个注解没法出现,要全写
@Test
public void testData() throws Exception{
String resource= "SqlMapConfig.xml";
//通过流将核心配置文件读取进来
InputStream config= Resources.getResourceAsStream(resource);
////通过核心配置文件输入流来创建会话工厂
SqlSessionFactory factory= new SqlSessionFactoryBuilder().build(config);
//通过工厂创建回话
SqlSession openSession = factory.openSession();
//只查询一条数据,(第一个参数:所调用的sql语句= namespace+.+sql的ID,参数)
User user = openSession.selectOne("test.findUserById", 1);
System.out.println(user);
}
}
在查询数据回来是list的时候。xml文件配,以及使用
1.user.xml配置
<select id="findUserByUsername" parameterType="String" resultType="mode.User">
SELECT * from user a WHERE a.username LIKE '%${value}%'
select>
2.java文件测试
/**
* 根据username查询数据
* @throws Exception
*/
@Test
public void testSelectUserName() throws Exception{
String resource = "SqlMapConfig.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession openSession = factory.openSession();
List selectList = openSession.selectList("test.findUserByUsername", "王五");
System.out.println(selectList);
}
5.添加数据
5.1 在user.xml文件中,添加
<insert id="insertUser" parameterType="mode.User" >
<selectKey keyProperty="id" order="AFTER" resultType="int" >
select LAST_INSERT_ID()
selectKey>
INSERT INTO user (username,birthday,sex,address) VALUES (#{username},#{birthday},#{sex},#{address})
insert>
5.2 java中测试
public class UserAddTest {
@Test
public void instarUserData() throws Exception{
String resource = "SqlMapConfig.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession openSession = factory.openSession();
//List selectList = openSession.selectList("test.insertUser", "王五");
User user = new User();
user.setUsername("XXX");
user.setSex("1");
user.setAddress("常州");
user.setBirthday(new Date());
System.out.println("///////////////////////"+user.getId());
openSession.insert("test.insertUser", user);
System.out.println("///////////////////////"+user.getId());
}
}
5.3 添加uuid,id主键不是int型
需要增加通过select uuid()得到uuid值
select uuid()
insert into user(id,username,birthday,sex,address)
values(#{id},#{username},#{birthday},#{sex},#{address})
注意这里使用的order是“BEFORE”
6 删除数据 和 修改数据 在user.xml文件和Test文件中
id="delectUser" parameterType="int" >
DELETE FROM user WHERE id = #{id}
id= "updateUser" parameterType="mode.User" >
update user set username=#{username} where id=#{id}
java测试代码
/**
* 删除
* @throws Exception
*/
@Test
public void delectUserData() throws Exception{
String resource = "SqlMapConfig.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession openSession = factory.openSession();
openSession.delete("test.delectUser", 24);
openSession.commit();
}
@Test
/**
* 修改
* @throws Exception
*/
public void updateUserData() throws Exception{
/*
String resource = "SqlMapConfig.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession openSession = factory.openSession();
User user = new User();
user.setId(10);
user.setUsername("yyyyyyyyyyyyy");
openSession.update("test.updateUser", user);
openSession.commit();
*/
UserDaoImp userDaoImp = new UserDaoImp();
userDaoImp.updateUser();
}
7 dao编程使用
dao.java
package dao;
public interface UserDao {
public void updateUser();
}
daoImpl.java
package dao;
import java.io.IOException;
import java.io.InputStream;
import mode.User;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
public class UserDaoImp implements UserDao{
private static SqlSessionFactory factory;
public static SqlSessionFactory getFactory() {
if (null == factory) {
String resource = "SqlMapConfig.xml";
InputStream inputStream;
try {
inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory newfactory = new SqlSessionFactoryBuilder().build(inputStream);
return newfactory;
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return factory;
}
public static void setFactory(SqlSessionFactory factory) {
UserDaoImp.factory = factory;
}
public UserDaoImp() {
}
@Override
public void updateUser() {
// TODO Auto-generated method stub
SqlSession openSession = getFactory().openSession();
User user = new User();
user.setId(10);
user.setUsername("aaaaaaaaaaaa");
openSession.update("test.updateUser", user);
openSession.commit();
}
}
1.mybatis中动态代理,最大优势不写过多的java代码
切记,xml文件和java接口文件必须在一个目录里面
2.配置xml文件—与前面一样
<mapper namespace="mapper.UserMapper">
<select id="selectUser" parameterType="int" resultType="mode.User">
select * from user where id=#{id}
select>
<select id="selectLikeUser" parameterType="String" resultType="mode.User">
SELECT * from user a where a.username like '%${value}%'
select>
<insert id="insertUser" parameterType="mode.User" >
<selectKey order="AFTER" resultType="int" keyProperty="id">
select LAST_INSERT_ID()
selectKey>
INSERT INTO user (username,birthday,sex,address) VALUES (#{username},#{birthday},#{sex},#{address})
insert>
mapper>
3.java 接口,方法名必须要和xml里面的id一样
package mapper;
import java.util.List;
import mode.User;
public interface UserMapper {
public User selectUser(int id);
public List selectLikeUser(String name);
}
4.测试java方法,与前面的方法一样
package mybatis_demo_01;
import java.io.InputStream;
import java.util.Date;
import java.util.List;
import javax.persistence.Basic;
import mapper.UserMapper;
import mode.User;
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;
public class UserTestMapper {
private SqlSessionFactory factory;
//这个是测试的时候先启动
@Before
public void setUp() throws Exception{
String resource = "SqlMapConfig.xml";
//通过流将核心配置文件读取进来
InputStream inputStream = Resources.getResourceAsStream(resource);
//通过核心配置文件输入流来创建会话工厂
factory = new SqlSessionFactoryBuilder().build(inputStream);
}
@Test
public void selectUser(){
/*
* 第一查询
SqlSession openSession = factory.openSession();
UserMapper mapper = openSession.getMapper(UserMapper.class);
User selectUser = mapper.selectUser(22);
System.out.println(selectUser.getUsername());
//模糊查询
SqlSession openSession = factory.openSession();
UserMapper mapper = openSession.getMapper(UserMapper.class);
List selectLikeUser = mapper.selectLikeUser("王");
for (User user : selectLikeUser) {
System.out.println(user.getUsername());
}
*/
SqlSession openSession = factory.openSession();
UserMapper mapper = openSession.getMapper(UserMapper.class);
User user = new User();
user.setSex("男");
user.setUsername("XXX");
user.setBirthday(new Date());
user.setAddress("常州");
int insertUser = mapper.insertUser(user);
System.out.println(insertUser);
//必须要这个
openSession.commit();
}
}
在myBatis中一些关键字的使用
<mapper namespace="mapper.UserMapper">
<sql id="user_where">
<where>
<if test="username != null and username != '' ">
and username like '%${username}%'
if>
<if test="sex != null and sex != ''">
and sex = #{sex}
if>
where>
sql>
<select id="selectUser" parameterType="int" resultType="mode.User">
select * from user where id=#{id}
select>
<select id="selectLikeUser" parameterType="String" resultType="mode.User">
SELECT * from user a where a.username like '%${value}%'
select>
<insert id="insertUser" parameterType="mode.User" >
<selectKey order="AFTER" resultType="int" keyProperty="id">
select LAST_INSERT_ID()
selectKey>
INSERT INTO user (username,birthday,sex,address) VALUES (#{username},#{birthday},#{sex},#{address})
insert>
<select id="selectLikeAndWhereUser" parameterType="vo.ViewBean" resultType="mode.User">
select * from user
<include refid="user_where">include>
select>
<select id="selectInUser" parameterType="vo.ViewBean" resultType="mode.User">
select * from user
<where>
<if test="ids != null">
<foreach collection="ids" item="id" open="id in(" separator="," close=")">
#{id}
foreach>
if>
where>
select>
mapper>
2.在SqlMapConfig.xml中配置log4j输出文件
<configuration>
<properties resource="db.properties">properties>
<settings>
<setting name="logImpl" value="STDOUT_LOGGING"/>
settings>
<typeAliases>
<package name="modo"/>
typeAliases>
<environments default="development">
<environment id="development">
<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>
<mappers>
<mapper resource="User.xml"/>
<mapper class="mapper.UserMapper"/>
mappers>
configuration>
3.java 代码中测试(必须在接口java文件中配置,与id相同的方法)
SqlSession openSession = factory.openSession();
UserMapper mapper = openSession.getMapper(UserMapper.class);
User user = new User();
user.setUsername("小");
List selectLikeAndWhereUser = mapper.selectLikeAndWhereUser(user);
for (User user2 : selectLikeAndWhereUser) {
System.out.println(user2.getUsername() + "-----------------------");
}
SqlSession openSession = factory.openSession();
UserMapper mapper = openSession.getMapper(UserMapper.class);
List list = new ArrayList();
list.add(1);
list.add(10);
ViewBean viewBean = new ViewBean();
viewBean.setIds(list);
List selectInUser = mapper.selectInUser(viewBean);
for (User usr : selectInUser) {
System.out.println(usr.getUsername());
}