MyBatis的基础查询

1,导入MyBatis使用的依赖
<dependencies>

            <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
            <dependency>
                <groupId>org.mybatis</groupId>
                <artifactId>mybatis</artifactId>
                <version>3.4.6</version>
            </dependency>

            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>5.1.46</version>
                <scope>runtime</scope>
            </dependency>
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.12</version>
                <scope>test</scope>
            </dependency>
        </dependencies>
2,MyBatis的配置类SqlMapConfig.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
   <!--配置和数据库链接相关的信息-->
    <!--四大件
    驱动
    地址
    用户名
    密码
    default 默认的环境, 在这个配置文件中 可以创建多个环境,如果有多个的时候需要指定默认值,这个值就是下面环境的id值
    -->
    <environments default="abc">

        <environment id="abc">
            <!--
            固定值JDBC
            -->
            <transactionManager type="JDBC"></transactionManager>

            <!--数据源 其实就是一个连接池
            可以使用mybatis默认的连接池POOLED
            -->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql:///db_shopping?useUnicode=true&amp;characterEncoding=UTF8"/>
                <property name="username" value="root"/>
                <property name="password" value="qishimeiyoumima"/>
            </dataSource>
        </environment>

    </environments>

<!--配置sql语句的文件地址,生成mapper对象-->
    <mappers>
        <mapper resource="User.xml"></mapper>
    </mappers>

</configuration>
3,pojo类User.class
public class User {
    private  int id;
    private String username;
    private String password;
    private String email;
    private String gender;
    private int flag;
    private int role;
    private String code;


    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    public int getFlag() {
        return flag;
    }

    public void setFlag(int flag) {
        this.flag = flag;
    }

    public int getRole() {
        return role;
    }

    public void setRole(int role) {
        this.role = role;
    }

    public String getCode() {
        return code;
    }

    public void setCode(String code) {
        this.code = code;
    }


    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                ", email='" + email + '\'' +
                ", gender='" + gender + '\'' +
                ", flag=" + flag +
                ", role=" + role +
                ", code='" + code + '\'' +
                '}';
    }

}

4,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" >
<!--namespace 命名空间

对sql的statement进行分类的,我们调用这里面sql
语句的时候会使用
-->
<mapper namespace="test">
    <!-- id 代表当前sql语句的id,我们需要通过这个id来找到这个sql语句
    parameterType 代表的是参数的数据类型, mybatis内部帮我们封装了一些类型  比如 int代表的是java.lang.Integer
    resultType 返回结果的全限定名称,或者是mybatis内置的类型
    public String person.david.mybatis.pojo.User.getId()//方法的全限定名称
    #{} 占位符,相当于我们在使用jdbc的时候的? ,里面写什么呢? 如果是一个参数,并且参数的类型是基本数据类型或者是字符串的时候,可以随便写
    但是为了方便了解是做什么或者是为了方便知道参数的含义,建议写对应的数据名字
    -->
    <select id="findUserById" parameterType="int" resultType="com.qianfeng.mybatis.pojo.User">
      SELECT * FROM tb_user WHERE id=#{id}
    </select>
    <!--
    当返回结果为多条的时候, resultType这里是单挑数据类型,也就是集合的泛型
    ${} 拼接符,会将内容原样输出拼接到对应的位置,注意,如果这个参数是一个基本数据类型或者是字符串,这个地方必须填写value
    拼接符因为是原样输出内容,所以会存在一个很大的风险,sql注入,所以一般情况下 like会用到这个,或者是一些按照列明排序等会用到
    -->
    <select id="findUserByName" parameterType="string" resultType="person.david.mybatis.pojo.User">

        SELECT * FROM tb_user WHERE username like '%${value}%'
    </select>
    <!--
        insert是sql里面最特殊的一个语句,只有两种结果,一个是成功,一个是抛异常,不像update
        #{username}代表从user对象中获取一个名字叫username的属性(注意不是变量名),属性就是get/set方法去掉getting/set后首字母小写
        当参数是一个对象的时候,这里面要通过占位符的方式进行填写参数,参数的名字就是要作为参数值的属性的属性名
    -->
    <insert id="insertUser" parameterType="person.david.mybatis.pojo.User">
        INSERT INTO tb_user (username,password,email,gender,flag,role,code) VALUES (#{username},#{password},#{email},#{gender},#{flag},#{role},#{code})

    </insert>
	<!--
	selectKey 获取主键
	resultType 主键值的类型
	keyProperty 代表主键的值放入到参数中的哪个属性上面,比如当前期望将主键的值放到我们的user对象的id属性上面
	order 代表selectKey对应的sql语句的执行顺序,在下面真正的sql语句执行之前还是之后执行,此处我们需要插入数据之后才能知道结果,所以是after
	
	SELECT LAST_INSERT_ID() 获取最后一次插入的主键,这个方法只能获取当前事物中的最后一次插入主键
	-->
    <insert id="insertUser1" parameterType="person.david.mybatis.pojo.User">

      <selectKey resultType="int" keyProperty="id" order="AFTER">

          SELECT LAST_INSERT_ID()
      </selectKey>

        INSERT INTO tb_user (iusername,password,email,gender,flag,role,code) VALUES (#{username},#{password},#{email},#{gender},#{flag},#{role},#{code})

    </insert>

    <insert id="insertUser2" parameterType="person.david.mybatis.pojo.TestPojo">

        <selectKey resultType="string" keyProperty="id" order="BEFORE">

            SELECT UUID()
        </selectKey>

        INSERT INTO db_test (id) VALUES (#{id})

    </insert>

    
    <delete id="dasdasd" parameterType="string">
        DELETE  from db_test where id =#{id}

    </delete>


    <update id="update" parameterType="person.david.mybatis.pojo.User">

      update tb_user set username=#{username} where id =#{id}

    </update>

</mapper>
5,测试类TestMain.class
public class TestMain {

    private SqlSessionFactory sqlSessionFactory;

    @Before
    public void before() throws IOException {
        InputStream inputStream= Resources.getResourceAsStream("SqlMapConfig.xml");//将配置文件通过io流的方式打开 /WEB-INF/classes
        sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);//创建sqlsession工厂
    }

    @Test
    public void test1() throws IOException {
        //如果创建对象加载sql语句
        //链接数据库
        InputStream inputStream= Resources.getResourceAsStream("SqlMapConfig.xml");//将配置文件通过io流的方式打开 /WEB-INF/classes
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);//创建sqlsession工厂
        //获取链接
        SqlSession sqlSession = sqlSessionFactory.openSession();//数据库的链接
        User user = sqlSession.selectOne("test.findUserById", 5);//调用sql. 参数1 的格式是 xml文件的 namespace.id
        System.err.println(user);
        sqlSession.close();//关闭链接

    }
 }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值