Maven+MyBatis 基础程序创建<2>

这里完成更多的基础数据库操作
1 User.xml代码

<?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">

<mapper namespace="User">
<!-- 这里的namespace可以随便定义,就是标识当前文件的存在 -->

    <resultMap type = "entity.User" id = "map1">
    <!-- type就是当前类~,id标识当前resultMap -->
        <result column = "name" property = "name" />
        <result column = "age" property = "age" />
        <!-- column是数据库中的列名,property是当前result的属性名 -->
    </resultMap>
    <!-- 以上是定义resultMap,用来查询多条数据 -->    
    <!-- 如果数据库中的列名不能和Java定义的类的属性名一一对应的话,可以用resultMap来完成映射 -->
    <!-- 可以用多个resultMap完成多个查询(或者别的功能?) -->

    <insert id = "insertUser" parameterType = "entity.User">
    <!-- <insert>标签作用:插入数据;id标识当前标签;parameterType是接受参数的参数类型(User类必须写全路径名) -->
        insert into user (name,age,sex,did) values (#{name},#{age},#{sex},#{did})
        <!-- #{name}对应User类的name属性(必须一一对应不然系统不认) -->
    </insert>
    <delete id = "deleteUser" parameterType = "int">
        delete from user where id = #{id}
    </delete>

    <update id = "updateUser" parameterType = "map">
        update user set name = #{name} where id = #{id}
    </update>
    <select id = "selectCount" resultType = "int">
        select count(*) from user
    </select>
    <select id = "selectCountBySex" resultType = "int" parameterType = "int">
        select count(*) from user where sex = #{sex}
    </select>
    <select id = "selectCountByALot" resultType = "int" parameterType = "map">
        select count(*) from user where sex = #{sex} and age > #{age}
    </select>
    <select id = "selectById" parameterType = "int" resultType = "entity.User">
        select * from user where id = #{id}
        <!-- 数据库的表的列名如果跟对应的Java类的属性名一一对应的话,查询出的记录会自动映射到Java类中生成对象 -->
        <!-- 如果不能保证一一对应则不能这样写 -->
    </select>
    <select id = "selectAll" resultType = "entity.User">
        select * from user
    </select>
    <select id = "selectName" resultType = "String">
        select name from user
    </select>
    <select id = "selectNameAndAge" resultMap = "map1">
        select name,age from user
    </select>
    <!-- resultMap指向map1对应的resultMap -->
    <!-- 尽管只查了两列,但是还是会返回对象(一条记录就是一个对象),只是没有查询的值会为空 -->
</mapper>


2 Main.java代码

package main;

import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import entity.User;

public class Main {

    public static void main(String[] args) {
        String path = "Config.xml";
        //这里的配置文件不需要写路径
        //(但是如果没有把配置文件放在resources包中或者在里面创建了文件夹的话,就需要写路径了)
        try {
            InputStream stream = Resources.getResourceAsStream(path);   
            SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
            SqlSessionFactory fac = builder.build(stream);
            SqlSession session = fac.openSession();
            //以上是固定格式

            //1.插入操作
            User user = new User();
            user.setName("韩耀");
            user.setAge(18);
            user.setSex(0);
            user.setDid(1);
            //创建User对象          
            session.insert("User.insertUser", user);
            //执行插入操作
            //参数一:namespace.insertid
            //参数二:被操作的参数
            session.delete("User.deleteUser", 13);


            //2.更新操作
            Map map = new HashMap();
            map.put("name", "聂风");
            map.put("id", 20);
            session.update("User.updateUser", map);


            //3.查询操作(查询总共有多少条记录)
            int result = session.selectOne("User.selectCount");
            System.out.println(result);


            //4.查询操作(查询性别为男的user)
            int result = session.selectOne("User.selectCountBySex",1);
            System.out.println(result);


            //5.查询操作(查询性别为女年龄为19的user)
            Map map = new HashMap();
            map.put("sex", 0);
            map.put("age",19);
            int result = session.selectOne("User.selectCountByALot",map);
            System.out.println(result);


            //6.查询操作(查询id为1的user,控制台输出他的姓名)
            User user = session.selectOne("User.selectById",1);
            System.out.println(user.getName());


            //7.查询操作(查询全部记录)
            List<User> list = session.selectList("User.selectAll");
            for(User user : list)
                System.out.println(user.getName());


            //8.查询操作(查询所有user的姓名)
            List<String> list = session.selectList("User.selectName");
            for(String name : list)
                System.out.println(name);


            //9.查询操作(查询全部user的姓名和年龄)
            List<User> list = session.selectList("User.selectNameAndAge");          
            for(User user:list) {
                System.out.println(user.getName());
                //可以查询到所以可以打印出来
                System.out.println(user.getSex());  
                //没有查询sex所以值都为空
            }


            session.commit();
            //提交(如果没有这句话则之前的数据库操作不会执行,但是查询的时候不需要commit())
            session.close();
            //关闭session
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值