1.mapper约束
//mapper约束
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
2.单表crud操作
3.参数与返回值
1.查询全部
<select id="findAll" resultType="com.zs.domain.User">
select * from user ;
</select>
2.插入数据
标签<selectKey>:配置插入操作后,获取插入数据的id
<insert id="saveUser" parameterType="user">
<selectKey keyProperty="id" keyColumn="id" resultType="int" order="AFTER" >
select last_insert_id();
</selectKey>
insert into user (username,address,sex,birthday)values (#{username},#{address},#{sex},#{birthday});
</insert>
3.更新操作
<update id="updateUser" parameterType="user">
update user set username=#{username},address=#{address},sex=#{sex},birthday=#{birthday} where id=#{id};
</update>
4.删除操作
<delete id="deleteUser" parameterType="java.lang.Integer">
delete from user where id=#{uid};
</delete>
5.通过id查找数据
<select id="findById" parameterType="INT" resultType="com.zs.domain.User">
select * from user where id =#{uid};
</select>
6.通过名字查找数据
前者是Statement对象的字符串拼接SQL,更高效但是不安全
后者是PrepatedStatement的参数占位符
<!-- <select id="findByName" parameterType="string" resultType="com.zs.domain.User">-->
<!-- select * from user where username like %${name}%;-->
<!-- </select>-->
<select id="findByName" parameterType="string" resultType="com.zs.domain.User">
select * from user where username like #{name};
</select>
7.查找有几个用户
<select id="findTotal" resultType="int">
select count(id) from user ;
</select>
8.resultMap
<resultMap id="userMap" type="user">
<id property="id" column="id"></id>
<result property="username" column="username"></result>
<result property="address" column="address"></result>
<result property="sex" column="sex"></result>
<result property="birthday" column="birthday"></result>
</resultMap>
9.抽取重复的sql语句
<sql id="defaultUser">
select * from user
</sql>
<select id="findAll" resultMap="userMap">
<include refid="defaultUser"></include>
</select>
10.使用userMap查询
<select id="findById" parameterType="INT" resultMap="userMap">
select * from user where id =#{uid};
</select>
<select id="findByName" parameterType="string" resultMap="userMap">
select * from user where username like #{name};
</select>
4.配置细节,标签的使用
1. 配置properties
可以在标签内部配置连接数据库的信息,也可以通过属性引用外部配置文件信息
resource属性:用于指定配置文件的位置,是按照类路径的写法来写,且必须存在于类路径下
url属性:是要求按照url写法来写地址
URL:Uniform Resource Locator 统一资源定位符,是可以唯一标识一个资源的位置
写法 http://localhost:8080/mybatisserver/demo1Servlet
协议 主机 端口 URI
URI:Uniform Resource Identifier 统一资源标识符。它是应用中可以唯一定位一个资源的。
<properties>
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC"/>
<property name="username" value="root"/>
<property name="password" value="密码"/>
</properties>
<properties resource="jdbcConfig.properties">
</properties>
<properties url="file:///C:/Users/地址/src/main/resources/jdbcConfig.properties">
</properties>
2. typeAliases标签
使用typeAliases配置别名,配置domain中的类名
typeAlias用于配置别名,type属性指定的是实体类全限定类名。alias属性指定别名,当指定了别名就在区分大小写
<typeAliases>
<typeAlias type="com.zs.domain.User" alias="user"></typeAlias>
</typeAliases>
用于指定要配置别名的包,指定后包下的实体类都注册别名,且不分大小写
<typeAliases>
<package name="com.zs.domain"/>
</typeAliases>
3. mappers标签
配置映射文件的位置
4.package标签是用于指定dao接口所在的包,当指定后就不需要再写mapper以及resource与class
<mappers>
</mapper> <package name="com.zs.dao"/>
</mappers>
<mappers>
<mapper resource="com/zs/dao/IUserDao.xml"></mapper>
</mappers>
5.OGNL表达式
Object Graphic Navigation Language
对象 图 导航 语言
它是通过对象的取值方法来获取数据。在写法上把get给省略了
例:类中的写法user.getUsername()
OGNL表达式写法user.username
mybatis在parameterType中已经提供属性所需得嘞,所以不需要对象名直接username。
6.传递简单类型
1.传递pojo对象
mybatis使用ognl表达式解析对象字段的值,#{}或者${}中的值为pojo属性名称
2.传递pojo包装对象
开发中通过pojo传递综合的查询条件,不仅包括用户查询条件还包括其它的查询条件,此时可以利用包装对象传递输入参数。
<select id="findUserByVo" parameterType="QueryVo" resultMap="userMap">
select * from user where username like #{user.username}
</select>
public class QueryVo {
private User user;
private List<Integer> ids;
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public List<Integer> getIds() {
return ids;
}
public void setIds(List<Integer> ids) {
this.ids = ids;
}
}
7.jdbcConfig.properties
jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC
jdbc.username=root
jdbc.password=密码
8.log4j.properties
log4j.rootCategory=debug, CONSOLE, LOGFILE
log4j.logger.org.apache.axis.enterprise=FATAL, CONSOLE
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%d{ISO8601} %-6r [%15.15t] %-5p %30.30c %x - %m\n
log4j.appender.LOGFILE=org.apache.log4j.FileAppender
log4j.appender.LOGFILE.File=d:\axis.log
log4j.appender.LOGFILE.Append=true
log4j.appender.LOGFILE.latout=org.apache.log4j.PatternLayout
log4j.appender.LOGFILE.layout.ConversionPattern=%d{ISO8601} %-6r [%15.15t] %-5p %30.30c %x - %m\n