mybatis对SQL 语句的配置标签
- /**
- * 根据id 查询
- * @param userId
- * @return
- */
- User findById(Integer userId);
- <select id="findById" resultType="com.ccc.domain.User" parameterType="int">
- select * from user where id = #{uid}
- select>
resultType 属性:用于指定结果集的类型。parameterType 属性 : 用于指定传入参数的类型。sql 语句中使用 #{} 字符:它代表占位符,相当于原来 jdbc 部分所学的 ? ,都是用于执行语句时替换实际的数据。具体的数据是由 #{} 里面的内容决定的。#{} 中内容的写法:由于数据类型是基本类型,所以此处可以随意写。
- public class MybastisCRUDTest {
- private InputStream in;
- private SqlSessionFactory factory;
- private SqlSession session;
- private IUserDao userDao;
-
- @Test
- public void testFindOne() {
- //6.执行操作
- User user = userDao.findById(41);
- System.out.println(user);
- }
-
- @Before//在测试方法执行之前执行
- public void init() throws Exception {
- //1.读取配置文件
- in = Resources.getResourceAsStream("SqlMapConfig.xml");
- //2.创建构建者对象
- SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
- //3.创建 SqlSession 工厂对象
- factory = builder.build(in);
- //4.创建 SqlSession 对象
- session = factory.openSession();
- //5.创建 Dao 的代理对象
- userDao = session.getMapper(IUserDao.class);
- }
-
- @After//在测试方法执行完成之后执行
- public void destroy() throws Exception {
- session.commit();
- //7.释放资源
- session.close();
- in.close();
- }
- }
- /**
- * 保存用户
- * @param user
- * @return
- 影响数据库记录的行数
- */
- int saveUser(User user);
- <!-- 保存用户-->
- <insert id="saveUser" parameterType="com.ccc.domain.User">
- insert into user(username,birthday,sex,address)
- values(#{username},#{birthday},#{sex},#{address})
- </insert>
parameterType 属性:代表参数的类型,因为我们要传入的是一个类的对象,所以类型就写类的全名称。sql 语句中使用 #{} 字符:它代表占位符,相当于原来 jdbc 部分所学的 ? ,都是用于执行语句时替换实际的数据。具 体的数据是由#{}里面的内容决定的。#{}中内容的写法:由于我们保存方法的参数是 一个 User 对象,此处要写 User 对象中的属性名称。它用的是 ognl 表达式。ognl 表达式:它是 apache 提供的一种表达式语言,全称是:Object Graphic Navigation Language 对象图导航语言它是按照一定的语法格式来获取数据的。语法格式就是使用 #{ 对象 . 对象 } 的方式 #{user.username} 它会先去找 user 对象,然后在 user 对象中找到 username 属性,并调用getUsername()方法把值取出来。但是我们在 parameterType 属性上指定了名称,所以可以省略 user. 而直接写 username 。
- @Test
- public void testSave(){
- User user = new User();
- user.setUsername("modify User property");
- user.setAddress("北京市顺义区");
- user.setSex("男");
- user.setBirthday(new Date());
- System.out.println("保存操作之前:"+user);
- //5.执行保存方法
- userDao.saveUser(user);
- System.out.println("保存操作之后:"+user);
- }
-
- @After//在测试方法执行完成之后执行
- public void destroy() throws Exception{
- session.commit();
- //7.释放资源
- session.close();
- in.close();
- }
4、新增用户 id 的返回值
新增用户后,同时还要返回当前新增用户的 id值,因为 id 是由数据库的自动增长来实现的,所以就相当于我们要在新增后将自动增长 auto_increment 的值返回。
- <insert id="saveUser" parameterType="USER">
- <selectKey keyColumn="id" keyProperty="id" resultType="int">
- select last_insert_id();
- selectKey>
- insert into user(username,birthday,sex,address)
- values(#{username},#{birthday},#{sex},#{address})
- insert>
- /**
- * 更新用户
- * @param user
- * @return 影响数据库记录的行数
- */
- int updateUser(User user);
- <update id="updateUser" parameterType="com.ccc.domain.User">
- update user set username=#{username},birthday=#{birthday},sex=#{sex},
- address=#{address} where id=#{id}
- update>
- @Test
- public void testUpdateUser()throws Exception{
- //1.根据 id 查询
- User user = userDao.findById(52);
- //2.更新操作
- user.setAddress("北京市顺义区");
- int res = userDao.updateUser(user);
- System.out.println(res);
- }
- /**
- * 根据 id 删除用户
- * @param userId
- * @return
- */int deleteUser(Integer userId);
- <delete id="deleteUser" parameterType="java.lang.Integer">
- delete from user where id = #{uid}
- delete>
- @Test
- public void testDeleteUser() throws Exception {
- //6.执行操作
- int res = userDao.deleteUser(52);
- System.out.println(res);
- }
SqlMapConfig.xml 中配置的内容和顺序-properties(属性)--property-settings(全局配置参数)--setting-typeAliases (类型别名)--typeAliase--package-typeHandlers (类型处理器)-objectFactory (对象工厂)-plugins (插件)-environments (环境集合属性对象)--environment(环境子属性对象)---transactionManager(事务管理)---dataSource(数据源)-mappers (映射器)--mapper--package
- <properties>
- <property name="jdbc.driver" value="com.mysql.jdbc.Driver"/>
- <property name="jdbc.url" value="jdbc:mysql://localhost:3306/eesy"/><property name="jdbc.username" value="root"/>
- <property name="jdbc.password" value="1234"/>
- properties>
- jdbc.driver=com.mysql.jdbc.Driver
- jdbc.url=jdbc:mysql://localhost:3306/eesy
- jdbc.username=root
- jdbc.password=1234
- <properties url=file:///D:/IdeaProjects/day02_eesy_01mybatisCRUD/src/main/resources/jdbcConfig.prop
- erties">
- properties>
- <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>
5、 typeAliases
(类型别名)
- <typeAliases>
- <typeAlias alias="user" type="com.ccc.domain.User"/>
- <package name="com.ccc.domain"/>
- <package name="其它包"/>
- typeAliases>
如:<mapper resource="com/ccc/dao/IUserDao.xml" />
<mapper class="com.ccc.dao.UserDao"/>
注意:此种方法要求mapper 接口名称和mapper 映射文件名称相同,且放在同一个目录中。
<package name="cn.itcast.mybatis.mapper"/>
注意:此种方法要求mapper 接口名称和mapper 映射文件名称相同,且放在同一个目录中。