标签:www 文件 images turn 下标 bat 数据类型 数据 red
JDBC
public static void main(String[] args) { ResultSet resultSet = null; PreparedStatement preparedStatement = null; Connection connection = null; try { // 加载驱动 Class.forName("com.mysql.jdbc.Driver"); // 创建数据库连接 String url = "jdbc:mysql://127.0.0.1:3306/mybatis_0505"; String user = "root"; String password = "123456"; connection = DriverManager.getConnection(url, user, password); // 创建statmenet String sql = "SELECT * FROM tb_user WHERE id = ?"; preparedStatement = connection.prepareStatement(sql); // 设置参数、执行sql,2个参数,第一个是参数的下标,从1开始,第二个参数数据查询条件数据 preparedStatement.setLong(1, 1L); resultSet = preparedStatement.executeQuery(); // 遍历结果集 while (resultSet.next()) { System.out.println("ID: " + resultSet.getLong("id")); System.out.println("userName: " + resultSet.getString("user_name")); System.out.println("password: " + resultSet.getString("password")); System.out.println("name: " + resultSet.getString("name")); } } catch (Exception e) { e.printStackTrace(); } finally { // 释放连接(资源) if (null != resultSet) { try { resultSet.close(); } catch (SQLException e) { e.printStackTrace(); } } if(null != preparedStatement){ try { preparedStatement.close(); } catch (SQLException e) { e.printStackTrace(); } } if(null != connection){ try { connection.close(); } catch (SQLException e) { e.printStackTrace(); } } } }
1、 驱动包硬编码到java代码中,更换数据库必须修改java文件重新编写,解决:定义到配置文件中。
2、 数据库连接字符串、用户名、密码硬编码到java代码中,解决:定义到配置文件中。
3、 Sql语句硬编码到java代码中
a) 修改sql,必须修改java文件、重新编译
b) 无法达到代码重用的作用
c) 解决方案:能否将sql写到配置文件中?
4、 设置参数有问题
a) 参数写死了,解决方案:传递进来即可
b) 需要判断参数类型,解决方案:能否自动判断?
c) 需要手动判断参数的位置,解决:能否自动判断?
5、 遍历结果集存在问题
a) 需要判断类型
b) 手动指定字段名
c) 解决:能否直接将结果集映射为java对象?
6、 释放资源存在问题,频繁的创建连接和关闭连接,造成资源的浪费,影响系统的性能,解决:使用连接池
jar是java工程, war 是web工程,pom是聚合工程
问:如何获取sqlSessionFactory ?
答: 分两种情况,1.不存在spring 时候直接new sqlSessionFactoryBuild 2.存在spring_mybatise整合包时候,直接在水平bean得到
问:sql为什么没有List类型
答:把对象放到list,不可能把list映射到数据中
总结:
1、 mybatis的配置文件有2类
a) mybatisconfig.xml,配置文件的名称不是固定的,配置了全局的参数的配置,全局只能有一个配置文件。
b) Mapper.xml 配置多个statemement,也就是多个sql,整个mybatis框架中可以有多个Mappe.xml配置文件。
2、 通过mybatis配置文件得到SqlSessionFactory
3、 通过SqlSessionFactory得到SqlSession,得到SqlSession就可以操作数据了。
4、 SqlSession通过底层的Executor(执行器),执行器有2类实现:
a) 基本实现
b) 带有缓存功能的实现
5、 MappedStatement是通过Mapper.xml中定义statement生成的对象。
6、 参数输入,无需手动判断参数类型和参数下标位置
a) HashMap,KV格式的数据类型
b) Java的基本数据类型
c) POJO,java的对象
7、 结果集输出,自动将查询的结果集映射为java对象(POJO)
a) HashMap,KV格式的数据类型
b) Java的基本数据类型
c) POJO,java的对象
http://www.mybatis.org/mybatis-3/zh/index.html mybatise中文文档
1.编写main方法实例化SqlSessionFactory
配置mybatis-config.xml
1、 配置UserMapper.xml,配置sql
2、 需要将UserMapper.xml添加到mybatis-config.xml中
3、 通过SqlSession执行
4、 测试
public interface UserDAO { /** * 根据id查询用户数据 * * @param id * @return */ public User queryUserById(Long id); /** * 新增user数据 * * @param user */ public void saveUser(User user); /** * 更新user数据 * * @param user */ public void updateUser(User user); /** * 根据id删除用户数据 * * @param id */ public void deleteUserById(Long id); }
public class UserDAOImpl implements UserDAO{ private SqlSessionFactory sqlSessionFactory; public UserDAOImpl(SqlSessionFactory sqlSessionFactory){ this.sqlSessionFactory = sqlSessionFactory; } @Override public User queryUserById(Long id) { SqlSession session = this.sqlSessionFactory.openSession(); User user = session.selectOne("userDAO.queryUserById", id); session.close(); return user; } @Override public void saveUser(User user) { SqlSession session = this.sqlSessionFactory.openSession(); session.insert("userDAO.saveUser", user); //提交事物 session.commit(); session.close(); } @Override public void updateUser(User user) { SqlSession session = this.sqlSessionFactory.openSession(); session.update("userDAO.updateUser", user); //提交事物 session.commit(); session.close(); } @Override public void deleteUserById(Long id) { SqlSession session = this.sqlSessionFactory.openSession(); session.delete("userDAO.deleteUserById", id); //提交事物 session.commit(); session.close(); } }
<mapper namespace="userDAO"> <select id="queryUserById" resultType="cn.itcast.mybatis.pojo.User"> SELECT *,user_name userName FROM tb_user WHERE id = #{id} </select> <insert id="saveUser" parameterType="cn.itcast.mybatis.pojo.User"> INSERT INTO tb_user ( id, user_name, password, name, age, sex, birthday, created, updated ) VALUES ( NULL, #{userName}, #{password}, #{name}, #{age}, #{sex}, #{birthday}, NOW(), NOW() ); </insert> <update id="updateUser" parameterType="cn.itcast.mybatis.pojo.User"> UPDATE tb_user SET user_name = #{userName}, password = #{password}, name = #{name}, age = #{age}, sex = #{sex}, birthday = #{birthday}, updated = NOW() WHERE id = #{id} </update> <delete id="deleteUserById"> DELETE FROM tb_user WHERE id = #{id} </delete> </mapper>
public class UserDAOImplTest { private UserDAO userDAO; @Before public void setUp() throws Exception { String resource = "mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); this.userDAO = new UserDAOImpl(sqlSessionFactory); } @Test public void testQueryUserById() { User user = this.userDAO.queryUserById(1L); System.out.println(user); } @Test public void testSaveUser() { User user = new User(); user.setAge(20); user.setBirthday(new Date()); user.setName("test_1"); user.setPassword("123456"); user.setSex(1); user.setUserName("test_username_1"); this.userDAO.saveUser(user); } @Test public void testUpdateUser() { User user = this.userDAO.queryUserById(2L); user.setAge(30); this.userDAO.updateUser(user); } @Test public void testDeleteUserById() { this.userDAO.deleteUserById(6L); } }
标签:www 文件 images turn 下标 bat 数据类型 数据 red
原文地址:http://www.cnblogs.com/hudj/p/7568336.html