User类
public class User {
private int id;
private String username;// 用户姓名
private String sex;// 性别
private Date birthday;// 生日
private String address;// 地址
}
QueryUserOV类(POJO类:里面还有自定义的User类)
public class QueryUserOV {
private User user;
}
sqlMapcofig.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">
<!--mybatis整体流程:
1、配置全局文件SqlMapConfig.xml
2、根据配置的全局配置文件,创建工厂。
3、工厂创建一个会话sqlSession。
4、会话调用mapper
-->
<configuration>
<!-- 加载java的配置文件或者声明属性信息,以后写xml配件,都是采用properties写参数,xml引入的方式 -->
<properties resource="db.properties"></properties>
<!-- 单个自定义别名 -->
<!-- <typeAliases><typeAlias type="zym.com.po.User" alias="user"/></typeAliases> -->
<!--推荐采用以下模式,指定包名称来为该包下的po类声明别名,默认的别名为类名,首字母大小写都可
以后在mapper文件中写Type的时候就可以直接用类名了。
-->
<typeAliases>
<package name="zym.com.po" />
</typeAliases>
<environments default="development">
<environment id="development">
<!-- 配置JDBC事务控制,由mybatis进行管理 -->
<transactionManager type="JDBC"></transactionManager>
<!-- 配置数据源,采用mybatis连接池 -->
<dataSource type="POOLED">
<property name="driver" value="${db.driver}" />
<property name="url" value="${db.url}" />
<property name="username" value="${db.username}" />
<property name="password" value="${db.password}" />
</dataSource>
</environment>
</environments>
<!--package代表mapper文件底下的所有映射文件,采用此方法前提是,mapper接口和mapper映射文件都必须在同一个目录下,并且名称相同 -->
<mappers>
<package name="mapper"/>
</mappers>
</configuration>
UserMapper.java (mapper接口)
public interface UserMapper {
List<User> findUserByName(String username);
List<User> findUserByNameAndSex1(QueryUserOV queryUserOV);
List<User> findUserByNameAndSex2(Map<String, Object> map);
List<User> getUserNameAndSex3(QueryUserOV queryUserOV);
List<User> getUserNameAndSex4(QueryUserOV queryUserOV);
}
UserMapper.xml(mapper映射文件)
<?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">
<!--下面的resultType用的都是user,实际是zym.com.po.User。是由SqlMapConfig.xml里面的typeAliases别名配置来的 -->
<!--此处的命名空间=UserDao的类路径 -->
<mapper namespace="mapper.UserMapper">
<select id="findUserByName" parameterType="java.lang.String"
resultType="user">
SELECT * FROM USER WHERE username ='${value}';
</select>
<!--传入类型pojo类型的时候,取里面的值用user.username,这里可以看到连接符${}对于pojo类型,是下面的方式。简单类型的话连接符只能是value -->
<select id="findUserByNameAndSex1" parameterType="zym.com.po.QueryUserOV" resultType="user">
select *from USER WHERE USERNAME='${user.username}' and SEX=#{user.sex};
</select>
<!--传入参数是map类型的 -->
<select id="findUserByNameAndSex2" parameterType="hashmap" resultType="user">
select *from USER WHERE USERNAME='${username}' and SEX='${sex}';
</select>
<!--传出参数是pojo类型的,sql返回的列名要和resultType定义类的属性名一致,如果不一致就为空,下面只有username\sex两个字段,其他字段返回就是null -->
<select id="getUserNameAndSex3" parameterType="zym.com.po.QueryUserOV" resultType="user">
select username ,sex from USER WHERE USERNAME = '${user.username}'
and SEX=#{user.sex};
</select>
<!--传出参数是pojo类型的,如果查询出来的结果有别名,就要用 resultMap,将column列名再转成property名 -->
<resultMap type="user" id="UserMapByName">
<id column="_id" property="id"/>
<result column="_username" property="username"/>
<result column="_sex" property="sex"/>
</resultMap>
<select id="getUserNameAndSex4" parameterType="zym.com.po.QueryUserOV" resultMap="UserMapByName">
select id _id,username _username,sex _sex from USER WHERE USERNAME = '${user.username}'
and SEX=#{user.sex} and id=#{user.id};
</select>
</mapper>
测试java
public class sqlTest {
private SqlSessionFactory sqlSessionFactory;
@Before
public void setup() throws IOException {
String resource = "SqlMapConfig.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
}
/*传入参数是基本类型的*/
@Test
public void findUserByName(){
SqlSession sqlSession = sqlSessionFactory.openSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
List<User> findUserByName = mapper.findUserByName("zym");
System.out.println("结果:"+findUserByName);
sqlSession.close();
}
/*传入类型pojo类型的时候*/
@Test
public void findUserByNameAndSex(){
SqlSession sqlSession = sqlSessionFactory.openSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
QueryUserOV queryUserOV = new QueryUserOV();
User user = new User();
user.setSex("男");
user.setUsername("小明");
queryUserOV.setUser(user);
List<User> findUserByNameAndSex = mapper.findUserByNameAndSex1(queryUserOV);
System.out.println("结果:"+findUserByNameAndSex);
sqlSession.close();
}
/*传入参数是map类型的 */
@Test
public void findUserByNameAndSex2(){
SqlSession sqlSession = sqlSessionFactory.openSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
Map<String, Object> map = new HashMap<>();
map.put("username", "zym");
map.put("sex", "男");
List<User> findUserByNameAndSex2 = mapper.findUserByNameAndSex2(map);
System.out.println("结果:"+findUserByNameAndSex2);
sqlSession.close();
}
/*传出参数是pojo类型的 */
@Test
public void findUserByNameAndSex3(){
SqlSession sqlSession = sqlSessionFactory.openSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
QueryUserOV queryUserOV = new QueryUserOV();
User user = new User();
user.setSex("男");
user.setUsername("zym");
user.setId(34);
queryUserOV.setUser(user);
List<User> getUserNameAndSex3 = mapper.getUserNameAndSex3(queryUserOV);
List<User> getUserNameAndSex4 = mapper.getUserNameAndSex4(queryUserOV);
System.out.println("结果1:"+getUserNameAndSex3);
System.out.println("结果2:"+getUserNameAndSex4);
sqlSession.close();
}
}