目录结构:
2.sqlMapperConfig.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>
<typeAliases>
<typeAlias type="com.lm.bean.User" alias="user"></typeAlias>
</typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"></transactionManager>
<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="mapper/userMapper2.xml"/>
</mappers>
</configuration>
3.userMapper2.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">
<mapper namespace="com.lm.dao.UserMapper">
<select id="findAll" resultType="user">
select * from user
</select>
<select id="findOne" resultType="user" parameterType="int">
select * from user where id=#{id}
</select>
<select id="findUser" resultType="user" parameterType="user">
select * from user
<where>
<if test="id!=null">
and id=#{id}
</if>
<if test="name!=null">
and name=#{name}
</if>
<if test="password!=null">
and password=#{password}
</if>
</where>
</select>
<select id="findUsers" resultType="user" parameterType="list">
select * from user
<where>
<foreach collection="list" open="id in(" close=")" item="id" separator=",">
#{id}
</foreach>
</where>
</select>
</mapper>
3.userMapper接口:
package com.lm.dao;
import com.lm.bean.User;
import java.io.IOException;
import java.util.List;
public interface UserMapper {
public List<User> findAll() throws IOException;
public User findOne(int id);
public List<User> findUser(User user);
public List<User> findUsers(List<Integer> ids);
}
4.userService:
package com.lm.service;
import com.lm.bean.User;
import com.lm.dao.UserMapper;
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 java.io.IOException;
import java.io.InputStream;
import java.util.List;
public class UserService {
public static void main(String[] args) throws IOException {
InputStream stream = Resources.getResourceAsStream("sqlMapperConfig.xml");
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(stream);
SqlSession session = factory.openSession();
UserMapper mapper = session.getMapper(UserMapper.class);
List<User> users = mapper.findAll();
for (User user : users) {
System.out.println(user);
}
session.close();
}
}
这里动态创建代理对象mapper,不用自己手动写实现类了。
运行结果:
5:userService2:
public class UserService2 {
public static void main(String[] args) throws IOException {
InputStream stream = Resources.getResourceAsStream("sqlMapperConfig.xml");
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(stream);
SqlSession session = factory.openSession();
UserMapper mapper = session.getMapper(UserMapper.class);
User user = mapper.findOne(4);
System.out.println(user);
session.close();
}
}
运行结果:
6.动态if:
@Test
public void test01() throws IOException {
InputStream stream = Resources.getResourceAsStream("sqlMapperConfig.xml");
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(stream);
SqlSession session = factory.openSession();
UserMapper mapper = session.getMapper(UserMapper.class);
User user=new User();
/* user.setId(2);
user.setName("林默");*/
user.setPassword("8888");
List<User> user2 = mapper.findUser(user);
for (User user1 : user2) {
System.out.println(user1);
}
session.close();
}
当只提供密码时:
当什么都不提供时:
@Test
public void test01() throws IOException {
InputStream stream = Resources.getResourceAsStream("sqlMapperConfig.xml");
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(stream);
SqlSession session = factory.openSession();
UserMapper mapper = session.getMapper(UserMapper.class);
User user=new User();
/* user.setId(2);
user.setName("林默");*/
// user.setPassword("8888");
List<User> user2 = mapper.findUser(user);
for (User user1 : user2) {
System.out.println(user1);
}
session.close();
}
运行结果:
默认查询所有。
7.需要注意的是mapper.xml与mapper接口需要对应上:
(1)xml里的namespace对应的是mapper接口的相对位置。
(2)xml里的id对应接口中的方法名。
(3)xml里的resultType对应接口种方法的返回值类型。
(4)xml里的parameterType对应接口中的参数类型。
8.动态forEach:
@Test
public void test02() throws IOException {
InputStream stream = Resources.getResourceAsStream("sqlMapperConfig.xml");
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(stream);
SqlSession session = factory.openSession();
UserMapper mapper = session.getMapper(UserMapper.class);
List<Integer> list=new ArrayList<>();
list.add(1);
list.add(4);
list.add(6);
list.add(7);
List<User> users = mapper.findUsers(list);
for (User user : users) {
System.out.println(user);
}
session.close();
}
运行结果:
如果只添加一个,就会显示一个,这里不再举例。