mybatis中结果集是如何映射resultType的?
mybatis框架是对JDBC的封装,在原生JDBC中,prepareStament对象执行完SQL语句后会返回一个结果集,然后通过ResultSet对象的next方法(行指针)判断是否还有下一个结果来进行遍历结果集,在遍历结果集的过程中完成对实体类对象的实例化(一条结果就实例化一个对象),在mybatis中,同样是当我们指定的resultType中的返回类型后,mybatis将得到的结果集进行遍历,在遍历的过程中将数据实例化成resultType指定的对象(一条结果就实例化一个对象)。
//加载驱动,在com.mysql.jdbc.Driver类中有一个静态方法,该静态方法完成了驱动的注册
Class.forName("com.mysql.jdbc.Driver");
//建立连接
String url="jdbc:mysql://localhost:3306/test";
String user="********";
String password="*******";
Connection conn=DriverManager.getConnection(url,user,password);
//执行SQL语句
//1.创建一个Statement对象
Statement stmt=conn.createStatement();
//2.通过Statement对象执行SQL语句,得到一个ResultSet结果集
String sql=" select * from user where id="+id;
ResultSet rs=stmt.executeQuery(sql);
//遍历结果集,实例化实体类
List studentList=new CopyOnWriteArrayList();
while(rs.next()){
int id=rs.getInt("id");
String name=rs.getString("name")
//Student student=new Student(id,name);
Student student=new Student(n);
student.setId(id);
student.setName(name);
student.setAge(rs.getInt("age"));
studentList.add(student);
String username=rs.getString("username");
}
//加载驱动,在com.mysql.jdbc.Driver类中有一个静态方法,该静态方法完成了驱动的注册
Class.forName("com.mysql.jdbc.Driver");
//建立连接
String url="jdbc:mysql://localhost:3306/test";
String user="********";
String password="*******";
Connection conn=DriverManager.getConnection(url,user,password);
//执行SQL语句
//1.通过占位符创建SQL语句
String sql=" select * from user where id=(?)";
//2.创建一个PrepareStatement对象
PreparedStatement pstmt=conn.prepareStatement(sql);
//3.给占位符设置值
pstmt.setInt(1,id);
//4.通过PrepareStatement对象执行SQL语句,得到一个ResultSet结果集
ResultSet rs=pstmt.executeQuery();
//遍历结果集,实例化实体类
List studentList=new CopyOnWriteArrayList();
while(rs.next()){
int id=rs.getInt("id");
String name=rs.getString("name")
//Student student=new Student(id,name);
Student student=new Student(n);
student.setId(id);
student.setName(name);
student.setAge(rs.getInt("age"));
studentList.add(student);
String username=rs.getString("username");
}
使用Preparestatement批量插入
String sql = "insert into happi_data (name,data,timestamp) values (?,?,?)";
PreparedStatement prepareStatement = connection.prepareStatement(sql);
for(int i = 0 ; i < 500 ; i ++ ) {
prepareStatement.setString(1,value1)
prepareStatement.setString(2,value1)
prepareStatement.setString(3,value1)
prepareStatement.addBatch();//调用addBach方法,将数据添加到Batch缓存池
}
prepareStatement.executeBatch();//执行批量添加