一:映射的输入输出 作用: Mapper.xml映射文件中定义了操作数据库的sql,每个sql是一个statement,映射文件是mybatis的核心。
二:resultType(输出的简单类型)
-
resultType的值是一个类型:
参考getnow输出日期类型,看下边的例子输出整型: Mapper.xml文件: <!-- 获取用户列表总数 --> <select id="findUserCount" parameterType="user" resultType="int"> select count(1) from user </select>
Mapper接口: public int findUserCount(User user) throws Exception;
调用:
Public void testFindUserCount() throws Exception{
//获取session
SqlSession session = sqlSessionFactory.openSession();
//获取mapper接口实例
UserMapper userMapper = session.getMapper(UserMapper.class);
User user = new User();
user.setUsername("管理员");
//传递Hashmap对象查询用户列表
int count = userMapper.findUserCount(user);
//关闭session
session.close();
}
输出简单类型必须查询出来的结果集有一条记录,最终将第一个字段的值转换为输出类型。 使用session的selectOne可查询单条记录。
2.resultMap(输出的非简单类型-----》输出pojo列表)
resultMap:手动指定查询结果的列和对象的属性进行对应。值是<resultMap>标签的ID
resultType可以指定pojo将查询结果映射为pojo,但需要pojo的属性名和sql查询的列名一致方可映射成功。
如果sql查询字段名和pojo的属性名不一致,可以通过resultMap将字段名和属性名作一个对应关系 ,resultMap实质上还需要将查询结果映射 到 pojo对象中。
resultMap可以实现将查询结果映射为复杂类型的pojo,比如在查询结果映射对象中包括pojo和list实现一对一查询和一对多查询。
三:sql的动态
if:
根据参数,我们生成的sql语句可能会变化
if语法结构:
<if test="boolean表达式">
sql语句片断
</if>
案例:
<!-- 传递pojo综合查询用户信息 -->
<select id="findUserList" parameterType="user" resultType="user">
select * from user
where 1=1
<if test="id!=null">
and id=#{id}
</if>
<if test="username!=null and username!=''">
and username like '%${username}%'
</if>
</select>
注意:if中空格的非空判断必须要做(!=“”)
where
语法结构: <where></where>保存sql语句中where关键字后的语法正确。
案例:
<select id="findUserList" parameterType="user" resultType="user">
select * from user
<where>
<if test="id!=null and id!=''">
and id=#{id}
</if>
<if test="username!=null and username!=''">
and username like '%${username}%'
</if>
</where>
</select
<where />可以自动处理第一个and。
foreach 语法结构: <foreach collection="list" item="obj" open=" and id in ( " close=" ) " separator=",">
{obj}
</foreach>
案例:
sql的片段 sql中可将重复的sql提取出来,使用时用include引用即可,最终达到sql重用的目的,
将where条件抽取出来
使用include引用
注意:如果引用其他mapper.xml的sql片段,则在引用时需加上namespace: <inciude refid="namespace.sql片段"/>
四:表与表之间的关联
1.使用resultType,定义订单信息po,此po类中包括了订单信息和用户信息 案例: sql语句:
定义po类
po类中应该包括上边sql查询出来发的所有字段,
加上get/set方法
OrdersCustom类继承Order类后OrdersCustom类包括了Orders类的所有的字段,值需要定义用户信息字段即可
Mapper.xml文件的配置
Mapper接口 Test类: 方法1 定义专门的po类作为输出类型,其中定义了sql查询结果集所有的字段。此方法较为简单,企业中使用的较多
2.定义po类,在Orders类中加入User属性,user属性中用于储存关联查询的用户信息,因为订单关联查询用户是一对一的关系,所以这里使用单个User对象存储关联查询的用户信息 Mapper.xml
这里resultMap指定orderUserResultMap
association:表示进行关联查询的单条记录
property:表示进行关联查询的结果储存在cn.itcast.mybatis.po.Orders的user属性中
javaType:表示关联查询的结果类型
<id property="id" column="user_id"/>:查询结果的user_id列对应关联对象的id属性,这里是<id/>表示user_id是关联查询对象的唯一表示
<result property="username" column="username"/>:查询结果的username列对应关联对象的username属性
Mapper接口 public List<Orders> findOrdersListResultMap()throw Exception;
test:
方法2使用association完成关联查询,将关联查询信息映射到pojo对象中
一对多 定义po类,在User类中加入List<Orders> Orders;属性
加上get/set方法
Mapper.xml
collection部分定义了用户关联的订单信息。表示关联查询结果集 property="orders":关联查询的结果集存储在User对象的上哪个属性。 ofType="orders":指定关联查询的结果集中的对象类型即List中的对象类型。此处可以使用别名,也可以使用全限定名。 <id />及<result/>的意义同一对一查询。
Mapper接口 List<User>getUserOrderLlist();
test: public void getUserOrderLlist(){ SqlSession session=sqlSessionFactory.openSession(); UserMapper userMapper=session.getMapper(UserMapper.class); List<User> result=userMapper.getUserOrderLlist(); for(User user : result ){ System.out.println(user); } session.close(); }
五:Mybatis整合Spring 1 SqlSessionFactory对象应该放到spring容器中作为单例存在。 2 SqlSessionFactory对象应该放到spring容器中作为单例存在。 3 Mapper代理形式中,应该从spring容器中直接获得mapper的代理对象。 4 数据库的连接以及数据库连接池事务管理都交给spring容器来完成。
第一步:创建一个java工程。 第二步:导入jar包。(上面提到的jar包) 第三步:mybatis的配置文件sqlmapConfig.xml 第四步:编写Spring的配置文件 1、数据库连接及连接池 2、事务管理(暂时可以不配置) 3、sqlsessionFactory对象,配置到spring容器中 4、mapeer代理对象或者是dao实现类配置到spring容器中。 spring.xml <!-- 加载配置文件 --> <context:property-placeholder location="classpath*:db.properties" />
<!-- 数据库连接池 -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="${jdbc.driver}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
<property name="maxActive" value="10" />
<property name="maxIdle" value="5" />
</bean>
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!-- 数据库连接池 -->
<property name="dataSource" ref="dataSource" />
<!-- 加载mybatis的全局配置文件 -->
<property name="configLocation" value="mybatis.xml" />
</bean>
<!-- mybatisr的代理开发 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="cn.itcast.simple.dao"></property>
</bean>
第五步:编写dao或者mapper文件
第六步:测试。
spring整合mybatis只要配置两个bean: sqlSessionFactory, MapperScannerConfigurer
Spring整合mybatis简单的登录案例流程图
1 开发环境 jdk,Eclipse,Tomcat,Springmvc 2 需求 使用springmvc实现商品展示 3 需求分析 请求的url:/itemList.action 参数:无 数据:静态 4 开发步骤 1 创建一个javaweb工程 2 导入jar
3 创建itemList.jsp(前端展示页面)
4 创建itemsController(添加商品信息的类,也叫做商品信息展示页面)
itemController是一个普通的java类,不需要任何接口,只需要在类上添加@Controller注解即可。@requestMapping注解指定请求的url,其中“.action”可加可不加。在ModeAndView对象中,将视图设置为“/WEB/INF/jsp/itemList.jsp”。
@Controller public class ItemController {
@RequestMapping("/itemList") public ModelAndView itemList() throws Exception {
List<Items> itemList = new ArrayList<>();
//商品列表
Items items_1 = new Items();
items_1.setName("联想笔记本_3");
items_1.setPrice(6000f);
items_1.setDetail("ThinkPad T430 联想笔记本电脑!");
Items items_2 = new Items();
items_2.setName("苹果手机");
items_2.setPrice(5000f);
items_2.setDetail("iphone6苹果手机!");
itemList.add(items_1);
itemList.add(items_2);
//创建modelandView对象
ModelAndView modelAndView = new ModelAndView();
//添加model
modelAndView.addObject("itemList", itemList);
//添加视图
modelAndView.setViewName("/WEB-INF/jsp/itemList.jsp");
// modelAndView.setViewName("itemsList"); return modelAndView; }
}
商品数据使用Items类描述,可以使用参考资料中提供的pojo类,
5 创建springmvc.xml
@Controller public class ItemController {
@RequestMapping("/itemList") public ModelAndView itemList() throws Exception {
List<Items> itemList = new ArrayList<>();
//商品列表
Items items_1 = new Items();
items_1.setName("联想笔记本_3");
items_1.setPrice(6000f);
items_1.setDetail("ThinkPad T430 联想笔记本电脑!");
Items items_2 = new Items();
items_2.setName("苹果手机");
items_2.setPrice(5000f);
items_2.setDetail("iphone6苹果手机!");
itemList.add(items_1);
itemList.add(items_2);
//创建modelandView对象
ModelAndView modelAndView = new ModelAndView();
//添加model
modelAndView.addObject("itemList", itemList);
//添加视图
modelAndView.setViewName("/WEB-INF/jsp/itemList.jsp");
// modelAndView.setViewName("itemsList"); return modelAndView; }
} 6 配置前端控制器(在web.xml中添加DispatcherService 的配置)
<!-- 前端控制器 --> <servlet> <servlet-name>springmvc</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:springmvc.xml</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>springmvc</servlet-name> <url-pattern>*.action</url-pattern> </servlet-mapping>

免费 AI IDE



