Mybaits之增删改查

Mybatis:

MyBatis 是支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架。 MyBatis 消除了几乎所有的 JDBC 代码和参数的手工设置以及对结果集的检索。 MyBatis 可以使用简单的XML 或注解用于配置和原始映射,将接口和 Java 的 POJO( Plain Old Java Objects,普通的Java 对象)映射成数据库中的记录.
  1)MyBATIS 目前提供了三种语言实现的版本,包括:Java、.NET以及Ruby。(我主要学习java,就讲java的使用)
  2)它提供的持久层框架包括SQL Maps和Data Access Objects(DAO)。
  3)mybatis与hibernate的对比?
   mybatis提供一种“半自动化”的ORM实现。
   这里的“半自动化”,是相对Hibernate等提供了全面的数据库封装机制的“全自动化”ORM实现而言,“全自动”ORM实现了POJO和数据库表之间的映射,以及 SQL 的自动生成和执行。

    而mybatis的着力点,则在于POJO与SQL之间的映射关系。

工程结构在这里插入图片描述
工具:eclipse
mysql
代码

数据库表

DROP TABLE IF EXISTS `workers`;
CREATE TABLE `workers` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(50) DEFAULT NULL,
  `age` int(11) DEFAULT NULL,
  `address` varchar(200) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;

pojo(实体类)

package com.qyn.pojo;
/*
 * workers的实体类
 * */
public class Workers {
	private int id;
	private String name;
	private int age;
	private String address;
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public String getAddress() {
		return address;
	}
	public void setAddress(String address) {
		this.address = address;
	}
	public String toString() {
		return "Workers [id=" + id + ", name=" + name + ", age=" + age + ", address=" + address + "]";
	}
	

}

config

<?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>
    <!-- mybatis别名定义 -->
    <typeAliases> 
        <typeAlias alias="Workers" type="com.qyn.pojo.Workers"/> 
    </typeAliases> 

    <environments default="development">
        <environment id="development">
        <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
            <property name="driver" value="com.mysql.jdbc.Driver"/>
            <property name="url" value="jdbc:mysql://localhost:3306/mybatis" />
            <property name="username" value="root"/>
            <property name="password" value="root"/>
            </dataSource>
        </environment>
    </environments>
    
    <!-- mybatis的mapper文件,每个xml配置文件对应一个接口 -->
    <mappers>
        <mapper resource="com/qyn/mapper/Workers.xml"/>
    </mappers>
</configuration>

mapper

<?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="com.qyn.operation.IWorkerOperation">

    <!-- select语句 -->
    <select id="selectByID" parameterType="int" resultType="Workers">
        select * from workers where id = #{id}
    </select>
     
    <select id="selectByName" parameterType="string" resultType="Workers">
        select * from workers where name = #{name}
    </select>
    
    <!--执行增加操作的SQL语句。id和parameterType分别与IUserOperation接口中的add方法的名字和参数类型一致。
    useGeneratedKeys设置为"true"表明要MyBatis获取由数据库自动生成的主键;keyProperty="id"指定把获取到的主键值注入到Workers的id属性--> 
    <insert id="add" parameterType="Workers" 
        useGeneratedKeys="true" keyProperty="id"> 
        insert into workers(name,age,address)  
             values(#{name},#{age},#{address})  
    </insert>
    
    <update id="update" parameterType="Workers" >
        update workers set name=#{name},age=#{age},address=#{address} where id=#{id}
    </update>
    
    <delete id="delete" parameterType="int">
        delete from workers where id=#{id}
    </delete>
    
</mapper>

operation

package com.qyn.operation;

import java.util.List;

import com.qyn.pojo.Workers;

public interface IWorkerOperation {
	
	 	 Workers selectByID(int id);
	    
	     List<Workers> selectByName(String name);
	    
	     void add(Workers worker);
	    
	     void update(Workers worker);
	    
	     void delete(int id);

}

log4j.properties

### direct log messages to stdout ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c:%L - %m%n
log4j.rootLogger=warn, stdout
log4j.logger.org.hibernate.tool.hbm2ddl=debug

测试类

package com.qyn.test;
import java.io.Reader;
import java.util.List;
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 com.qyn.operation.IWorkerOperation;
import com.qyn.pojo.Workers;
/*
 * 测试类:按主键,姓名查询用户表的相关信息
 *       插入用户
 *       按主键删除用户
 *       修改用户
 */
public class Test {

    private static SqlSessionFactory sqlSessionFactory;
    private static Reader reader;

    static {
        try {
            reader = Resources.getResourceAsReader("com/qyn/config/Configuration.xml");
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static SqlSessionFactory getSession() {
        return sqlSessionFactory;
    }

    public void getByID(int id) {
        SqlSession session = sqlSessionFactory.openSession();
        try {
        	IWorkerOperation iwo = session
                    .getMapper(IWorkerOperation.class);
            Workers worker = iwo.selectByID(id);
            if (worker != null) {
                System.out.println(worker.getId() + ":" + worker.getName()
                        + ":" + worker.getAge()+":"+worker.getAddress());
            }
        } finally {
            session.close();
        }
    }
    public void getWorkersList(String name) {
        SqlSession session = sqlSessionFactory.openSession();
        try {
        	IWorkerOperation iwo = session
                    .getMapper(IWorkerOperation.class);
            List<Workers> worker = iwo.selectByName(name);
            for (Workers user : worker) {
            	 System.out.println(user.getId() + ":" + user.getName()
                 + ":" + user.getAge()+":"+user.getAddress());
            }

        } finally {
            session.close();
        }
    }

    /**
     * 增加后要commit
     */
    public void add() {
    	Workers worker = new Workers();
    	worker.setAddress("china");
    	worker.setName("tom");
    	worker.setAge(21);
        SqlSession session = sqlSessionFactory.openSession();
        try {
        	IWorkerOperation iwo = session
                    .getMapper(IWorkerOperation.class);
        	iwo.add(worker);
            session.commit();
            System.out.println("新增用户ID:" + worker.getId());
        } finally {
            session.close();
        }
    }
    /*
     * 修改后要commit
     */
    public void update() {
        SqlSession session = sqlSessionFactory.openSession();
        try {
        	IWorkerOperation iwo = session
                    .getMapper(IWorkerOperation.class);
            Workers worker = iwo.selectByID(7);
            if (worker != null) {
            	worker.setAddress("安徽");
            	iwo.update(worker);
                session.commit();
            }
        } finally {
            session.close();
        }
    }

    /**
     * 删除后要commit.
     * 
     * @param id
     */
    public void delete(int id) {
        SqlSession session = sqlSessionFactory.openSession();
        try {
        	IWorkerOperation iwo = session
                    .getMapper(IWorkerOperation.class);
        	iwo.delete(id);
            session.commit();
        } finally {
            session.close();
        }
    }
    public static void main(String[] args) {
		Test t = new Test();
		//t.delete(4);
		//t.getByID(1);
		//t.update();
		//t.add();
		//t.getByID(7);
		//t.getWorkersList("tom");
		t.update();
	}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小浪饿了吗***

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值