1.查询所有
<!-- 查询所有 -->
<select id="findAll" resultType="com.wyc.domain.User">
select * from user;
</select>
2.Insert
username =#{username} 前面对象数据库中列 后面对应User类中的 属性 且名字一致
<insert id="saveUser" parameterType="com.wyc.domain.User">
insert into user(username,address,sex,birthday)values(#{username},#{address},#{sex},#{birthday});
</insert>
public void testSave(){
User user = new User();
user.setUsername("modify User property");
user.setAddress("北京市顺义区");
user.setSex("男");
user.setBirthday(new Date());
执行保存方法
userDao.saveUser(user);}
这样我们不知道 插入以后的 id是多少 可以 添加 selectKey
keyColumn="id"对应 数据库中列 keyProperty="id"对应属性 order 再insert 之后
<insert id="saveUser" parameterType="com.wyc.domain.User">
<selectKey keyColumn="id" keyProperty="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
username =#{username} 前面对象数据库中列 后面对应User类中的 属性 且名字一致
<!--根据id更新-->
<update id="updateUser" parameterType="com.wyc.domain.User">
update user set username =#{username},address=#{address},sex=#{sex},birthday=#{birthday}where id=#{id}
</update>
public void updateUser(){
User user = new User();
user.setId(49);
user.setUsername("wyc");
user.setAddress("重庆市顺义区");
user.setSex("女");
user.setBirthday(new Date());
userDao.updateUser(user);}
4.delete
参数是int Integer都可以 id=#{uid} 前面对象数据库中列 后面需要动态填入
<!--根据id删除-->
<delete id="deleteUser" parameterType="Integer">
delete from user where id=#{uid}
</delete>
public void deleteUSer(){
userDao.deleteUser(46);
}
5.模糊查询
参数是String 类型 返回值是User 类型 参数需要手动加上 % %
<!-- 根据名字模糊查询-->
<select id="findByName" parameterType="String" resultType="com.wyc.domain.User">
select * from user where username like #{name}
</select>
public void findByName(){
List<User> users = userDao.findByName("%王%");
for (User user : users) {
System.out.println(user);
}}
5.聚合查询
count(id) 不能有空格
<!--聚合函数 总个数-->
<select id="findTotal" resultType="int">
select count(id) from user ;
</select>
public void findTotal(){
int total = userDao.findTotal();
System.out.println(total);}
数据类列名 和 属性名不对应时 两种解决方法
1. sql 语句起 别名
<select id="findAll" resultType="com.wyc.domain.User">
select id as userId,username as userName,address as userAddress,sex as userSex,birthday as userBirthday from user;
</select>
2. 手动配置对应关系
配置 查询结果的列名和实体类的属性名的对应关系
<resultMap id="userMap" type="uSeR">
主键字段的对应
<id property="userId" column="id"></id>
非主键字段的对应
<result property="userName" column="username"></result>
<result property="userAddress" column="address"></result>
<result property="userSex" column="sex"></result>
<result property="userBirthday" column="birthday"></result>
</resultMap>
查询所有
<select id="findAll" resultMap="userMap">
select * from user;
</select>
Properties标签 专门用于抽取 property 这种标签
在主配置文件中
<configuration>
<environments default="mysql">
<environment id="mysql">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
配置连接数据库的4个基本信息
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/test"/>
<property name="username" value="root"/>
<property name="password" value="123"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/wyc/Dao/UserDao.xml"/>
</mappers>
</configuration>
<configuration>
<properties>
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/test"/>
<property name="username" value="root"/>
<property name="password" value="123"/>
</properties>
<environments default="mysql">
<environment id="mysql">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
配置连接数据库的4个基本信息
<property name="driver" value="${driver}"/> {名字对应上面的name}
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
</configuration>
好处是property配置可以放在配置文件中
resource标签指定资源位置
driver=com.mysql.cj.jdbc.Driver 配置文件中
url=jdbc:mysql://localhost:3306/test
username=root
password=123
<properties resource="jdbcConfig.properties"> 配置文件resource下直接引用
</properties>
<environments default="mysql">
<environment id="mysql">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
配置连接数据库的4个基本信息
<property name="driver" value="${driver}"/> {对应配置文件中的键}
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
url标签 指定资源位置
<properties url="file:///D:\java\Java源码\mybatis_01\src\main\resources\jdbcConfig.properties">
</properties>
<environments default="mysql">
<environment id="mysql">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
配置连接数据库的4个基本信息
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
typeAliases
主配置文件中 配置后 映射文件中 参数类型就可以使用 alias 指定的 名字 不区分大小写
<typeAliases>
typeAlias用于配置别名。type属性指定的是实体类全限定类名。alias属性指定别名,当指定了别名就再区分大小写
<typeAlias type="com.itheima.domain.User" alias="user"></typeAlias>
</typeAliases>
映射文件中 参数类型就可以使用 alias 指定的 名字 不区分大小写
<!--根据id更新-->
<update id="updateUser" parameterType="user">
update user set username =#{username},address=#{address},sex=#{sex},birthday=#{birthday}where id=#{id}
</update>
pacakge
效果与typeAlias 标签效果一样 并且类名就是别名
<typeAliases>
用于指定要配置别名的包,当指定之后,该包下的实体类都会注册别名,并且类名就是别名,不再区分大小写-
<package name="com.itheima.domain"></package>
</typeAliases>
也可以用于指定 映射的接口 包 当指定了之后就不需要在写mapper以及resource或者class了 -->
<mappers>
<package name="com.wyc.Dao"/>
</mappers>